zoukankan      html  css  js  c++  java
  • 高并发编程知识体系阅读总结

    高并发编程在软件开发中具有非常重要的作用,它是微观上的性能调优,

    首先并发是一个处理器同时处理多个任务

    并行是多个处理器或者是多核的处理器同时处理多个不同的任务

    同步是执行某个操作开始后就一直等着按部就班的直到操作结束

    异步是执行某个操作后立即离开,后面有响应的话再来通知执行者

    临界区是公共资源或者共享数据,由于共享数据的出现,必然会导致竞争。

    阻塞是某个操作需要的共享资源被占用了,只能等待,称为阻塞

    非阻塞是某个操作需要的共享资源被占用了,不等待立即返回,并携带错误信息回去,期待重试

    如果两个操作都在等待某个共享资源而且都不退让就会造成死锁:

    而活锁是相互谦让而导致阻塞无法进入下一步操作,跟死锁相反,死锁是相互竞争而导致的阻塞

    并发级别在理想的情况下我们希望所有线程都一起并行飞起来,但是CPU数量有限,线程源源不断,总得有个先来后到,不同场景需要的并发需求也不一样,比如秒杀系统我们需要很高的并发程度,但是对于一些下载服务,我们需要的是更快的响应,并发反而是其次的。所以我们也定义了并发的级别,来应对不同的需求场景。

    • 阻塞:阻塞是指一个线程进入临界区后,其它线程就必须在临界区外等待,待进去的线程执行完任务离开临界区后,其它线程才能再进去。

    • 无饥饿:线程排队先来后到,不管优先级大小,先来先执行,就不会产生饥饿等待资源,也即公平锁;相反非公平锁则是根据优先级来执行,有可能排在前面的低优先级线程被后面的高优先级线程插队,就形成饥饿

    • 无障碍:共享资源不加锁,每个线程都可以自有读写,单监测到被其他线程修改过则回滚操作,重试直到单独操作成功;风险就是如果多个线程发现彼此修改了,所有线程都需要回滚,就会导致死循环的回滚中,造成死锁

    • 无锁:无锁是无障碍的加强版,无锁级别保证至少有一个线程在有限操作步骤内成功退出,不管是否修改成功,这样保证了多个线程回滚不至于导致死循环

    • 无等待:无等待是无锁的升级版,并发编程的最高境界,无锁只保证有线程能成功退出,但存在低级别的线程一直处于饥饿状态,无等待则要求所有线程必须在有限步骤内完成退出,让低级别的线程有机会执行,从而保证所有线程都能运行,提高并发度。

  • 相关阅读:
    .net4.5使用async和await异步编程实例
    并行开发系列 Plinq等
    改善C#程序的建议9:使用Task代替ThreadPool和Thread
    C# Task 用法
    Task
    C#委托的介绍(delegate、Action、Func、predicate)(转)
    ACTION与FUNC
    C#二叉树简易实例
    一些简单的算法
    教你如何写thinkphp多表查询语句
  • 原文地址:https://www.cnblogs.com/ggrm/p/10618106.html
Copyright © 2011-2022 走看看