目录
CPU核心和线程数CPU内核CPU核心数CPU与线程数 线程和进程进程线程线程和进程的关系 线程的类型(留坑)Python多线程(留坑)参考CPU核心和线程数
CPU个数即CPU芯片个数。
CPU内核
CPU内核是CPU中间的核心芯片,由单晶硅制成,用来完成所有的计算、接受/存储命令、处理数据等,是数字处理核心。
核心(Die)又称为内核,是CPU最重要的组成部分。CPU中心那块隆起的芯片就是核心,是由单晶硅以一定的生产工艺制造出来的,CPU所有的计算、接受/存储命令、处理数据都由核心执行。各种CPU核心都具有固定的逻辑结构,一级缓存、二级缓存、执行单元、指令级单元和总线接口等逻辑单元都会有科学的布局。
来自百度百科
CPU核心数
CPU的核心数是指物理上,也就是硬件上存在着几个核心。比如,双核就是包括2个相对独立的CPU核心单元组,四核就包含4个相对独立的CPU核心单元组。
现在的电脑都是多核的,使用多线程能充分利用CPU来提供程序的执行效率。
CPU与线程数
线程数是一种逻辑上的概念,简单地说,就是模拟出的CPU核心数。比如,可以通过一个CPU核心数模拟出2线程的CPU,也就是说,这个单核心的CPU被模拟成了一个类似双核心CPU的功能。
CPU之所以要增加线程数,是源于多任务处理的需要。线程数越多,越有利于同时运行多个程序,因为线程数等同于在某个瞬间CPU能同时并行处理的任务数。
对于一个CPU,线程数总是 ⩾ \geqslant ⩾核心数的。一个核心最少对应一个线程,但通过超线程技术,一个核心可以对应两个线程,也就是说它可以同时运行两个线程。
Intel赛扬G460:单核心,双线程的CPU
Intel酷睿i3 3220:双核心,四线程
Intel酷睿i5 4570:四核心,四线程
Intel酷睿i7 4770K:四核心,八线程
CPU的线程数概念仅仅只针对Intel的CPU才有用,因为它是通过Intel超线程技术来实现的,最早应用在Pentium4上。如果没有超线程技术,一个CPU核心对应一个线程。所以,对于AMD的CPU来说,只有核心数的概念,没有线程数的概念。
Intel给他的x86设计了逻辑线程=2物理核心数,IBM的power8是逻辑线程=8物理核心数
主要参考博客
线程和进程
线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。
进程
操作系统中正在执行的程序,一个在内存中运行的应用程序。
每个应用程序都有一个自己的进程。
每一个进程启动时都会最先产生一个主线程。然后主线程会再创建其他的子线程。
线程
线程是一个基本的CPU执行单元。它必须依托于进程存活。
是进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。
与进程不同的是:同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈。所以,系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多。因此,线程也被称为轻量级进程。
线程和进程的关系
线程必须在某个进程中执行。一个进程可包含多个线程,有且只有一个主线程。多线程共享同一个地址空间、打开的文件、其他资源。多进程共享物理内存、磁盘、打印机、其他资源。线程的类型(留坑)
主线程子线程守护线程(后台线程)前台线程Python多线程(留坑)
GIL 的全称是 Global Interpreter Lock(全局解释器锁),来源是 Python 设计之初的考虑,为了数据安全所做的决定。某个线程想要执行,必须先拿到 GIL,我们可以把 GIL 看作是“通行证”,并且在一个 Python 进程中,GIL 只有一个。拿不到通行证的线程,就不允许进入 CPU 执行。
由于 GIL 锁存在,Python 里一个进程永远只能同时执行一个线程(拿到 GIL 的线程才能执行),这就是为什么在多核CPU上,Python 的多线程效率并不高的根本原因。
参考
/ThinkWon/article/details/10274
/p/a69dec87e646
/271/2713503.html
/kimsimple/p/7787018.html
/huayushuangfei/article/details/79921638
/microfan/p/5294250.html