CPU中的线程和操作系统(OS)中的线程显然是两个不同的概念,但是在实际调度的时候又有些关联。本文我们就来弄清楚,CPU中的线程和操作系统中的线程到底有什么区别。
一、CPU中的Thread
CPU中的线程,我们叫它们Thread,和OS中的线程的名字一样。它来自同步多线程(SMT,Simultaneous Multi-threading)的概念。我们现在在Intel的CPU上看到它,实际上这并不是Intel的发明创造。它最早起源于学术圈,在硬件上IBM实现也比Intel早。最早Intel使用了这种技术时候就叫做SMT,但后面改叫做HT (Hyper Threading),可能是这样更清楚(毕竟最多两个thread,比IBM怪物要少),更朗朗上口吧。
我们现在看到CPU,很多都支持HT,经常看到的2C4T的意思就是2核4线程(T,Thread)。1个内核中的thread是对称的和对等的,在软件上没有任何区别,BIOS也只有通过一些特殊手段才能区分。实际上,2C4T中的4个thread调度起来没有本质区别,它们都有自己单独的身份证号码:APIC ID。调度起来只要知道别人的APIC ID,就用自己的Local APIC寄存器发出两个IPI(Inter-Processor Interrupts)就好了,那个被指明的倒霉蛋就莫名其妙的开始被调度去指定的地址执行指令了(尽管是实模式)。当然也可以广播IPI让所有别的thread都去执行指定任务。
实际上CPU中Thead有多少,操作系统并不自己探测,是BIOS通过ACPI报告给OS的,那么BIOS是怎么知道有多少个Thread呢?就是通过广播IPI让各个thread自己来签到的,是不是很简单?
二、操作系统中的Thread
OS中的Thread有自己的栈空间,和同一进程中的其他线程共享地址空间等等,这些基本知识因为广为人所知,这里就不罗嗦了。
此Thread非彼Thread
操作系统中的进程可以很多,进程中的线程就更多了,常常有几十个上百个。而CPU的Thread就那么固定几个,是稀缺资源。两者都叫Thread是因为他们都是调度的基本单位,软件操作系统调度的基本单位是OS的Thread,硬件的调度基本单位是CPU中的Thread。操作系统负责把它产生的软Thread调度到CPU中的硬Thread中去。
以上就是CPU中的线程和操作系统(OS)中的线程的简单的区别,我们在调用这两个线程的时候,他们之间也会产生某种联系。在本站的多线程教程中还有很多类似的蒋蒋,能过有效帮助我们掌握相关的信息和资讯。