注意

关键模块:

threading, asyncio, multiprocessing 总结:

  1. python 无法实现- 并行+并发【GIL 的存在】
  2. 对于计算密集型【cpu-bound】,python 多线程无用,请使用多进程或者 C
  3. 对于输入输出密集型【I/O-bound】,python 多线程效率提升较好

python 多线程只占用一个 cpu 核心

并发+并行

并发

核心数 < 任务数
时间片轮转
假的多任务

并行

核心数 > 任务数
真的多任务

实例

  • Xeon E5 v3 系列 六核心 十二线程

六个 Cpu 核心 ,最多 12 个线程同时执行 程序执行流的最小单元是线程

  • 四核 8 线程与八核的区别

四核八线程是指使用了超线程技术 , 把一个物理核心,模拟成 两个逻辑核心 理论上要像八颗物理核心一样在同一时间执行八个线程,所以设备管理器和任务管理器中会显示出八个核心

但事实上并不是真正的八个核心,四核八线程就是真四核,虚拟八核;

四核八线程在有些情况下 比如任务量不大能让 CPU 利用率提高很多从而使其性能接近八核 CPU 的水平 而在另外一些情况比如 CPU 占用 100%满负荷工作的情况下,这时候四核八线程和八核的性能表现差距明显

四核八线程和八核的最大区别。

其实本质就是虽采用超线程技术能同时执行两个线程,但它并不象两个真正的 CPU 那样,每个 CPU 都具有独立的资源。 当两个线程都同时需要某一个资源时,其中一个要暂时停止,并让出资源,直到这些资源闲置后才能继续。 因此超线程的性能并不等于两颗 CPU 的性能。

总而言之四核 8 线程是 4 个物理核心模拟成 8 个逻辑核心,8 核是 8 个物理核心