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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    要做好性能测试,该掌握些什么?
    <form> 标签
    javascript DOM编程艺术 第10章问题记录
    简单的图片显示
    fieldset 不常用的HTML标签
    XMLHttpRequest
    单选复选框的制作
    ASP.NET MVC 中使用“RadioButtonList”和“CheckBoxList”
    Web Service 系列 → 第一个 Hello Word
    .NET平台开发实例药店系统分布式部署
  • 原文地址:https://www.cnblogs.com/ggrm/p/10618106.html
Copyright © 2011-2022 走看看