文章目录
- (一)、计算机的组成
- (二)、进程和线程
- 1、线程的切换
- 2、对于一个程序,设置多少个线程合适(线程池设置多少核心线程池)?
- 3、工业实践,CPU三级缓存
- 4、超线程
- 5、缓存行(一般为64bytes,64*8bit)
- 6、非线程安全
(一)、计算机的组成
- CPU:
算术逻辑单元ALU(arithmetic and logic unit):实现多组算数运算和逻辑运算的组合逻辑电路
寄存器Registers:存储二进制代码,由具有存储功能的触发器构成。一个触发器可以存储1位二进制代码,故存放n位二进制代码的寄存器,需用n个触发器来构成。
寄存器PC(program counter):存储内存地址,该地址是下一条即将执行的指令的地址。
缓存cache:存储时间片使用完但没执行完的线程的数据,例如:该线程未执行完的地址。
2、程序读入内存
程序读入内存全是由0和1构成,从内存读入CPU计算,要通过总线。
当一个指令为0101,但是其可以表达数字5和加法时,那么怎么区分该指令的正确操作。
总线分为:控制线、地址线、数据线。- 地址线:CPU下一步需要执行的操作的地址
- 控制线:指令
- 数据线:数据
一个程序的执行:先把程序读入内存,找到起始地址(main),逐步读出指令和数据,通过CPU计算再写回内存。
(二)、进程和线程
进程:当一个程序进入内存的时候就可以称为进程,并为其分配资源:内存空间。进程进入内存,同时产生一个主线程
线程:是可执行的计算单元(任务),多个线程共享进程的内存空间。(共享空间,不共享计算)
1、线程的切换
当线程在cpu中的时间片已经用完,但该线程未执行完,那么保存线程上下文(线程的状态、线程结束执行的地址)。
2、对于一个程序,设置多少个线程合适(线程池设置多少核心线程池)?
注:Nt:线程数量,Nc:CPU数量,Uc:CPU利用率(0-1),W:线程等待时间,C:线程执行时间。
Nt = Nc * Uc * (1+W/C)
例如:一个单核CPU,线程等待时间50%,线程执行时间50%,CPU利用率100%,那么带入公式,该程序就设置为两个线程。
3、工业实践,CPU三级缓存
4、超线程
一个CPU有一个计算单元、多个寄存器
5、缓存行(一般为64bytes,64*8bit)
缓存行:一次性读取的数据块
程序的局部性原理:
空间局部性:一旦程序访问了某个存储单元,则不久之后,其附近的存储单元也将被访问。
时间局部性:如果程序中的某条指令一旦执行,则不久之后该指令可能再次被执行;如果某数据被访问,则不久之后该数据可能再次被访问。
因为有缓存行,所有得有一种机制保证数据的一致性,这种机制被称为:缓存一致性协议(不同CPU有不同的缓存一致性协议)
6、非线程安全
多个线程对同一个对象的同一个实例变量进行操作时会出现值被更改、值不同步的情况,进而影响程序的执行流程。