多线程笔记-基础(一)

一、CPU核心数与CPU线程数关系

最早的cpu是一块芯片上只有一个处理器,后来将多个处理器集成到同一个芯片上,这样我们的cpu就进入一个多核时代,比如,四核就包含4个相对独立的CPU核心单元组,八核就包含8个相对独立的CPU核心单元组。那么cpu的核心数又与cpu线程数有何关系呢?一般来说他们之间是一对一的关系,也就是说四核拥有4个线程,但是intel引入超线程技术后,他们之间就变成了1:2的关系,但是在实际应用中我们可能感觉不到这种对应关系,比如我们拥有一个四核CPU,理论上来说我们同时能支持8个线程,但是当我们实际工作中需要10个线程时,是不是就无法创建多余的线程了呢?答案是否定的,我们并没有感受到CPU核心数对线程数的限制,实际上这是我们接下来要说的在CPU调度上有一个时间片轮转机制。

二、CPU时间片轮转机制(RR调度)

时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法。每个进程被分配一时间段,称作它的时间片,即该进程允许运行的时间。当时间片结束的时候,如果进程还在运行,这时候进程会被剥夺CPU执行时间,把下一个时间片让给其他进程执行,我们还未执行完成的进程在将来的某个时刻还会执行。这里会牵涉到一个上下文切换的概念,就是将上一个切换出去的进程所相关的数据保存起来,然后把下一时刻将要运行的进程相关的数据载入进来。上下文切换会消耗我们的系统资源,如果上下文切换过多肯定会影响到程序运行的效率,所以我们要控制上下文切换的次数。

三、进程和线程

进程:执行一段程序,资源分配的最小单位,比如Windows系统中运行的一个.exe程序可以说是一个进程,一个进程可以拥有多个线程。

多线程笔记-基础(一)_第1张图片

线程:CPU调度的最小单位,共享进程中的资源,不能够单独存在,必须依附于进程,通常在一个进程中可以包含若干个线程。

四、并行和并发

并发和并行都是解决多任务运行效率的有效手段,但是他们之间还是有些区别,并发强调的是同一时间段内,并行强调的是同一时刻。

eg:a.当你正在打游戏的时候,女朋友打来电话,这时候你是等打完这局游戏再去接女朋友电话,后果可能比较严重,此时表明你既不支持并发也不支持并行;

b.当你正在打游戏的时候,女朋友打来电话,这时候你果断放弃了游戏,等接完电话再继续游戏,此时表明你支持并发;

c:当你正在打游戏的时候,女朋友打来电话,这时候边玩游戏边接电话,两者同时执行的,表明你支持并行;

并行:当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状。.这种方式我们称之为并发。

并发:当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行。

五、高并发编程的意义和注意事项

意义:1】充分利用CPU资源 2】加快用户响应速度

注意事项:1】线程安全性 2】线程过多会消耗过多的资源

 

你可能感兴趣的:(多线程)