美文网首页
并发编程基础

并发编程基础

作者: 磊_5d71 | 来源:发表于2018-11-01 15:28 被阅读0次
    • 并发
      1、同时拥有两个或多个线程,如果程序在单核处理器上运行,多个线程交替地换入或者换出内存,这些线程是同时存在的,每个线程都处于执行过程中的某个状态,如果运行在多核处理器上,此时,程序中的每个线程都将分配到一个处理器核上,可以同时运行。
      2、多个线程操作相同的资源,保证线程安全,合理使用资源
    • 高并发
      1、(high Concurrency)是通过设计保证系统能够同时并行处理很多请求。
      2、服务能同时处理很多请求,提高程序性能。

    CPU多级缓存

    图片.png
    • 为什么要使用缓存
      CPU的频率太快了,快到主存跟不上,这样在处理器时钟周期内,CPU常常需要等待主存,浪费资源。所以cache出现,是为了缓解CPU和内存之间速度不匹配的问题。(cpu -> cache -> memory)
    • CPU cache有什么意义
      1、时间局部性:如果某个数据被访问,那么不久的将来它很可能被再次访问。
      2、空间局部性:如果某个数据被访问,那么它相邻的数据很快也可能被访问。

    缓存的一致性(MESI)

    首字母缩略词MESI中的字母表示可以标记高速缓存行的四种独占状态(使用两个附加位编码):
    1、修改(M)
    高速缓存行仅存在于当前高速缓存中,并且是脏的 - 它已从主存储器中的值修改(M状态)。在允许对(不再有效)主存储器状态的任何其他读取之前,需要高速缓存在将来的某个时间将数据写回主存储器。回写将该行更改为共享状态(S)。
    2、独家(E)
      缓存行仅存在于当前缓存中,但是干净 - 它与主内存匹配。它可以随时更改为共享状态,以响应读取请求。或者,可以在写入时将其改变为修改状态。
    3、共享(S)
      表示此高速缓存行可能存储在计算机的其他高速缓存中并且是干净的 - 它与主存储器匹配。可以随时丢弃该行(更改为无效状态)。
    4、无效(I)
      表示此缓存行无效(未使用)。对于任何给定的高速缓存对,给定高速缓存行的允许状态如图。当块标记为M(已修改)时,其他高速缓存中块的副本将标记为I(无效)


    图片.png

    CPU多级缓存-乱序执行优化

    图片.png

    Java内存模型(Java Memory Model,JMM)

    图片.png 图片.png 图片.png

    Java内存模型-同步的八种操作

    • lock锁定:作用于主内存的变量,把一个变量标识为一条线程独占状态
    • unlock解锁:作用于主内存的变量,把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定
    • read读取:作用于主内存的变量,把一个变量值从主内存传输到线程的工作内存中,以便随后的load动作使用
    • load载入:作用于工作内存的变量,它把read操作从主内存中得到的变量值放入工作内存的变量副本中。
    • user使用:作用于工作内存的变量,把工作内存中的一个变量值传递给执行引擎
    • assign赋值:作用于工作内存的变量,它把一个从执行引擎接收到的值赋值给工作内存的变量
    • store存储:作用于工作内存的变量,把工作内存中的一个变量的值传送到主内存中,以便随后的write操作
    • write写入:作用于主内存的变量,它把store操作从工作内存中一个变量的值传送到主内存的变量中。


      图片.png

    并发的优势与风险

    • 通常来说网络的io和磁盘的io要比cpu与内存io慢很多,多线程可以利用这些时间处理。


      图片.png

    相关文章

      网友评论

          本文标题:并发编程基础

          本文链接:https://www.haomeiwen.com/subject/vcwtxqtx.html