CPU 内核数 与 线程数 的关系
一个CPU 内核只能跑一个线程
由于Intel公司引入的超线程技术,使得物理CPU内核和虚拟CPU内核存在一个1:2的关系拓展。
因此如下图,原本4个内核的电脑,同时只能跑4个线程;由于1:2关系,拓展为8个逻辑处理器,因此可以同时跑8个线程。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CZkZGOjVjY3YzM0UTNjVDMjRGZxYjZhZDOhBDN3QjM38CX0EzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL2M3Lc9CX6MHc0RHaiojIsJye.png)
CPU 时间片轮转机制
Q:为啥我的电脑跑的进程远远多于CPU的逻辑处理器个数?
A:
CPU 将时间线分割成一个个的时间片
运用RR调度算法,进行时间片轮转
每个线程轮流获取CPU时间片进行操作
Q:为啥我感受不到线程在切换
人的反应时间在1s~0.01s
CPU执行一条指令 0.6纳秒ns
1秒(s)=1000000000纳秒(ns)
进程最大线程数限制
Linux 一个进程最多开1000个线程
Windows 一个进程最多开2000个线程
Q:为什么限制?
A:每每new一个新线程,线程会通过进程向操作系统申请资源(操作系统不直接分配资源给线程,只分配资源给进程)。进程再给该线程分配:
栈空间,默认值是1M,1000个线程会耗费1G。
句柄(文件描述符)。句柄是用来指向内存地址的开头位置。Linux限制最多1024个句柄