高并发编程知识体系阅读总结

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

posted @ 2019-03-09 22:14  萌萌程序猿  阅读(248)  评论(0编辑  收藏  举报