多线程和多进程
通常在硬件层面上和操作系统层面上都存在线程的概念。但是这两个概念是完全不同的,是一个词汇在不同层面上的不同意思。
CPU数,核心数,硬件的线程数
CPU数指的是一个计算机主板上实际上卡槽中插入的CPU个数,由卡槽socket决定。一般的计算机是一个卡槽,因为多个卡槽的CPU之间共享内存等资源需要高级的技术。一般服务器是多个物理CPU的,也就是CUP数对于个人计算机是1,对于服务器是>1.
核心数指的是单个CPU的内部存在的可以同时处理的处理器。
这里首先强调是这里的核心是CPU内部存在一定的硬件支持的
第二是这里的同时指的是真正的同时处理,不同于操作系统层面上的同时可以是单个核心不断切换导致的同时。
线程数thread,逻辑处理器logical processor,或者虚拟核心virtual core,是同一个东西,指的是一个核心中可以存在着SMT(simultaneous multithreading)或者HT(hyper-threading)技术,这些技术可以使得单个核心同时执行多个线程,就相当于上文提到的单个核心数内部又存在多个子核心,总的核心是这些子核心数之和。
所以系统总的核心数实际上是上面所有的乘积。也就是逻辑处理器数量= CPU数* 核心数 * 超线程数(SMT or HT) 。
最后在硬件层面上其实线程和进程是一样的,指的就是几个核心或者存在超线程时候的总的线程数。
Linux查看以上信息的命令,lscpu或者到/proc/cpuinfo查看。
Windows可以直接看任务管理器。
操作系统层面的进程和线程
操作系统层面上(不严格讲)
一个线程指的是一串又有逻辑的指令&#