线程基础,线程之间的共享和协作(1)

1.什么是进程跟线程

进程:就是当前正在允许的应用程序(软件)

线程:线程是cpu时间片轮转机制调度(RR调度)的最小单位

2. CPU核心数跟线程数的关系

1.内核:(也称物理核心,中央处理器,cpu的心脏)

由来讲解:早期电脑都是单核的,发展到现在出现了摩尔定律失效,纳米工艺突破到3纳米之后在继续突破芯片纳米工艺下去会出现量子隧穿,所以后面也就出现一个CPU里面有多个处理器,来进行提升总体的性能了。

摩尔定律:集成电路上可容纳的晶体管数量,大约每隔24个月便会增加一倍

image.png

芯片纳米工艺: 比如3纳米,就是芯片内部电路与电路之间的距离是3纳米,相当于一个间隙

image.png

量子隧穿:简单来说,就是量子叠加后所产生的的能量可以穿越中间的障碍,并且还可以反反复复的上演这个现象,就相当于cpu的纳米工艺一样,继续突破下去,就会出现电路与电路之间的间隙被击穿。

image.png

2.逻辑处理器:因特尔芯片大厂利用超线程技术实现一个1比2的关系,双倍的内核,原理就跟java中的多线程差不多

超线程技术:利用多线程反复的切换内核,实现双倍内核的比例,就比如我的电脑管理器中显示的是逻辑处理器为4,其实就是4个线程,由物理内核并发去执行。

3.核心数跟线程数关系:就是一个1对1的关系,比如我的电脑逻辑处理器是4那我就可以同时开4个线程进行计算处理

4.句柄:是一个是用来标识对象或者项目的标识符,也可以理解他为一个虚拟地址,windows中比如任务管理器中的一些 (应用程序图标,应用程序文字,按钮) 都可以理解为他就是一个句柄(虚拟地址),他会指向一个物理地址(应用程序目前在内存中的地址),说白了就是一个管理人,用于管理目前在内存中的数据地址,那我电脑目前句柄为99694,就相当于目前我的所有进程一共创建了99694个虚拟地址,用于指向目前在内存中的对象地址

image.png

5.CPU主频率:

介绍:如果我们把CPU比作人类的大脑,大脑需要向五官四肢发出信号协同工作,CPU同理,要保证内部硬件协同工作,就需要产生脉冲信号,让CPU的其他工作单元 (运算器,控制器等等...) 来进行工作

脉冲信号:

时钟周期:每一个脉冲信号的用时时间。

赫兹Hz(GHz): 单位时间1s内所产生的脉冲个数称之为频率,频率的最基本计量单位就是Hz。

拿我的电脑举例,我电脑的频率目前为2.50Ghz,相当于我电脑1秒内可以产生25亿个脉冲信号,比如我电脑为8个逻辑处理器,那就可以在一个时间周期内可以进行8个二进制加法运算,脉冲信号也可以理解为大脑指挥官,指挥其他的工作单元工作,频率越高,CPU执行的指令数越多,工作速度越快,但是还是要看总体的cpu的内部结构是否稳定还有性能如何来做判断。

3. CPU时间片轮转机制

image.png

就是一个进程的上下文切换机制,因为是并发,就是一个一个的线程交替去执行的,并不是一起执行的,所以需要进行一个上下文切换,这里的上下文切换是指进程切换

注意:上下文切换也会存值风险,一个切换需要消耗20000个cpu周期(周期也可以称一个基本操作,如取指,译码,执行),并发编程需要可能的减少上下文切换

4.并发与并行

并发:我们的应用能够交替的去执行不同的任务(创建多个线程但是都是在交替中执行的,不是一起在执行的,使用CPU时间片轮转机制切换)

并行:我电脑的逻辑处理器是8个我就可以同时开启8个线程同时处理任务(不是交替执行,是一起执行的)

在使用并发编程时候也要注意,共享进程资源问题处理不好很容易导致死锁,一系列的问题发送

操作系统限制一个进程能开多少线程: linux:1000, windows:2000,不能开太多了,因为开一个线程是需要分配栈空间的不设置的话一个线程1M,1千个线程1G,还会创建句柄,一些我就对象等等的一些资源

5.Thread跟Runnable的区别

Thread对线程的抽象

Runnable对任务的抽象

おすすめ

転載: juejin.im/post/7075296780383944718