18/31Day 孤尽训练营笔记分享

wuchangjian2021-11-14 18:12:45编程学习

       这篇文章继续记录并发处理有关笔记

并发处理

  什么是并行与并发

    并行:并行是指同时处理多任务的能力

    并发:并发是指再某个时间段内,多任务交替处理的能力

  线程安全

• 以医生坐诊为例子,医生并发地处理多个病人的询问、开化验单、查看化验结果、开药等工作,任何一个环节一旦出现数据混淆,都可能引1发严重的医疗事故
• 线程不安全就是交替执行,没有加锁,数据容易串起来

• 同一CPU 不同时刻交替执行不同的方法,就是并发
• 不同CPU 同一时刻执得不同的方法,就是并行

        延伸到计算机的线程处理过程中,因为各个线程轮流占用 CPU 的计算资源,可能会出现某个线程尚末执行完就不得不中断的情況,容易导致线程不安全
在这里插入图片描述

• 线程安全问题只在多线程环境下才出现,单线程串行执行不存在此问题。
• 保证高并发场景下的线程安全,可以从以下四个维度考量
 >数据单线程内可见
 >只读对象
 >线程安全类
 >同步与锁机制

  什么是锁

起初锁的概念:在计算机信息世界里,单单机单线程时代没有锁的概念
资源竞争的出现:自从出现了资源竞争,人们才意识到需要对部分场景的执行现场锁,昭告天下,表明自己的“短暂”拥有
Java中常用锁实现的方式
 >用并发包中的锁类
 >利用同步代码块

  AQS透过现象看本质

• Abstract 抽象:包含 tryAcquire tryRelease 等5个抽象方法 ,具体由子类实现;
• Queved 队列:利用队列来管理竞争共享资源的多线程,这个队列是 Node 节点的引1用虛实现;
• Synchronizer 同步器:是一个解决多线程同步问题的工具;

      AQS的本质:解决多线程访问共享资源并发问题的同步管理框架
在这里插入图片描述

  Lock、AQS与AOS的关系

在这里插入图片描述
      AQS为Java并发同步组件提供统一的底层支持,支持有目的、有步骤、有计划的协同作业

  程序 = 数据结构 + 算法

在这里插入图片描述
在这里插入图片描述

  线程与线程池的奥秘

在这里插入图片描述

    线程可以拥有自己的操作栈、程序计数器局部变量表等资源,它与同一进程内的其他线程共享该进程的所有资源

    线程池的作用包括:

• 利用线程池管理并复用线程、控制最大并发数等
• 增加对线程的管理,快速排查问题
• .实现任务线程队列缓存策略和拒绝机制
• 夹现某些与时间相关的功能,如定时执行、周期执行等
• 隔离线程环境
 >比如,交易服务和搜索服务在同一台服务器上,分别开启两个线程池,交易线程的资源消耗明显要大;因此,通过配置独立的线程池,将较慢的交易服务与搜索服务隔离开,避免各服务线程相互影响。

    线程池的用处

• 消息累框架实现消费的线程管理
• 数据库实现SQL语句执行的线程管理
• RPC框架内实现长链接的线程管理

  线程池构造方法

在这里插入图片描述

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。