持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第21天,点击查看活动详情
- 💂 个人网站: IT知识小屋
- 🤟 版权: 本文由【IT学习日记】原创、在CSDN首发、需要转载请联系博主
- 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦
前言
并发编程中,会涉及到许多相关的专业名词,在初始接触的时候很容易混淆和理解偏差,因此特意将常见的名称统计出来,方便学习。
并发相关词语
-
并发的出现目的:就是为了压榨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个字节
写在最后
总结: 经验就是一个积累的过程,没有谁能够一步登天,所以脚踏实地才是成功的秘诀。本文只是本人在使用并发知识是遇到的问题的总结,如果有哪里存在错误,欢迎大家留言指出,希望大家共同进步!
如果文章对你有帮助,欢迎给我点赞、关注。如有疑问,欢迎添加博主进行交流。