并发编程中的一些名称解释整理

2022-09-13 16:04:56 浏览数 (1)

前言

  并发编程中,会涉及到许多相关的专业名词,在初始接触的时候很容易混淆和理解偏差,因此特意将常见的名称统计出来,方便学习。

并发相关词语

  • 并发的出现目的:就是为了压榨CPU性能,早期的计算机只是单进程,随着发展,不断精进,从而让有限的硬件发挥出更大的作用
  • 进程:它是OS分配资源的最小单位,线程是OS任务调度的最小单位
  • 超线程(线程撕裂者):常理来说,CPU的一个核同一时刻只能执行一个线程,所以常说的4核多线程,其实属于超线程的概念,超线程实际上就是一个ALU单元对应多个PC和寄存器组,因为CPU的切换速度非常快,所以我们会感觉同时又多个线程在执行
  • CPU的组成:PC、寄存器组(Registers)、ALU(计算逻辑单元)、Cache(三层,其中l1,l2是在核内,l3是一颗CPU内所有核共用)。PC负责存储需要执行的指令、寄存器用于存储执行的数据、ALU负责执行计算和控制、Cache用于做缓存。
  • CPU和内存之间的速度相差大概有100倍
  • CPU只负责OS给定的指令,具体的线程是由OS调度(线程调度器,线程的调度器有不同的实现算法,一般Linux的算法是CFS),线程切换的时候,会需要将不同线程的数据(Register和PC)存储在cache中,用于线程恢复。
  • 线程的切换是需要消耗资源的,所以工作的线程数并不是设置越大越好
  • 纤程:绿色线程、用户管理的线程(非OS管理)
  • 程序、进程、线程的关系:程序是一种通过编程语言编写后可以被OS执行的一个静态文件,进程则是将程序加载到内存中,获取OS分配资源,线程则是进程中具体进行任务调用的单元,它是共享进程中的资源的。
  • 线程的三大性:可见性、有序性、原子性
  • 线程的可见性本质上来说是缓存问题:为了解决CPU和内存之间的速度差异性(提高执行效率),CPU访问寄存器的数据比访问内存中的数据快得多,在CPU和内存之间加了一系列缓存(3层缓存,工业实践得出来的)
  • 缓存读取:从里到外读取:l1->l2->l3->内存,这样引出了新的问题,如何保障存在不同核之间的缓存数据一致,这个机制也叫缓存一致性协议,它是一种硬件级别的协议,可以存在不同的实现,在Intel中,常见的是MESI协议
  • 很多标准都是经过:工业实践得出来的,它并不一定是性能最好的,但它是综合性考虑后最好的选择。
  • 工业上:缓存行一般是64个字节

写在最后

  总结: 经验就是一个积累的过程,没有谁能够一步登天,所以脚踏实地才是成功的秘诀。本文只是本人在使用并发知识是遇到的问题的总结,如果有哪里存在错误,欢迎大家留言指出,希望大家共同进步!

0 人点赞