CPU多线程作用

CPU通常提供了一个framework,让操作系统利用中断来实现线程调度,在线程调度里实现锁。操作系统的线程并不是非要运行在某一个固定的逻辑核上面,而且线程通常绑定了一组寄存器的值(如果像VC++一样用__await实现coroutine的话,会有若干组)。所以基本的关系就是,CPU有物理核,上面再有逻辑核,操作系统通过把寄存器的值(和一些其他的东西)在不同的时候复制到不同的逻辑核上面来实现线程。

cpu线程是一堆寄存器而已,如当前指令寄存器地址,栈指针,分页寄存器等,x86 cpu刚开始是支持多线程切换的,既在cpu指令级实现线程切换,比如任务门。但操作系统一般都不用这个功能,而是只使用一个线程,通过修改栈指针来实现线程切换。64位x86就取消任务门了。因此,cpu的线程跟操作系统说的线程,几乎没啥关系。即便cpu不支持线程,操作系统也是可以实现线程功能的。要说联系的话,现在多核cpu,有多个虚拟cpu,每个虚拟cpu有一个cpu线程,为了发挥cpu最大功效,操作系统也得准备相应数量的线程才行。


操作系统的线程是个软件概念,线程切换的行为与c语言中的函数调用颇为类似,可以粗略的认为线程就是一个函数,概念和实现上差不多。 cpu的线程,简单来说是一个在硬件层面实现的多条指令执行流或者队列,在某些多线程的cpu上会设置多个pc,多条流水线,冗余的功能单元,通过调度可以最大限度的使用功能单元,可以去看一下同时多线程(SMT——Simultaneous Multi-threading)的概念,方便理解。 从粒度上看,操作系统的多线程粒度要比cpu的多线程粒度要粗。一个操作系统线程开始运行的时候,在cpu上会形成多条指令流,即cpu多线程。 操作系统多线程是为了利用多个处理器核心,而cpu多线程是为了利用cpu内部冗余的功能单元,一般只有多发射的cpu才会有多线程,采用cpu多线程会提高其指令吞吐量。

相关文档
最新文档