多线程 - 多线程基础

回到顶部(go to top)

CPU 内核数 与 线程数 的关系

  • 一个CPU 内核只能跑一个线程
  • 由于Intel公司引入的超线程技术,使得物理CPU内核和虚拟CPU内核存在一个1:2的关系拓展。

因此如下图,原本4个内核的电脑,同时只能跑4个线程;由于1:2关系,拓展为8个逻辑处理器,因此可以同时跑8个线程。

 

回到顶部(go to top)

CPU 时间片轮转机制

Q:为啥我的电脑跑的进程远远多于CPU的逻辑处理器个数?

A:

  • CPU 将时间线分割成一个个的时间片
  • 运用RR调度算法,进行时间片轮转
  • 每个线程轮流获取CPU时间片进行操作

 

Q:为啥我感受不到线程在切换

A:

  • 人的反应时间在1s~0.01s
  • CPU执行一条指令 0.6纳秒ns
  • 1秒(s)=1000000000纳秒(ns)

 

回到顶部(go to top)

进程最大线程数限制

Linux 一个进程最多开1000个线程

Windows 一个进程最多开2000个线程

Q:为什么限制?

A:每每new一个新线程,线程会通过进程向操作系统申请资源(操作系统不直接分配资源给线程,只分配资源给进程)。进程再给该线程分配:

  • 栈空间,默认值是1M,1000个线程会耗费1G。
  • 句柄(文件描述符)。句柄是用来指向内存地址的开头位置。Linux限制最多1024个句柄

 

posted on   frank_cui  阅读(167)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2019-03-05 Leetcode - 213. House Robber II
2019-03-05 Leetcode - 198. House Robber
2019-03-05 SQL Server - 哈希索引
2019-03-05 SQL Server - 索引详细教程 (聚集索引,非聚集索引)
2019-03-05 SQL - ddl dml 区别
2019-03-05 Leetcode - 189. Rotate Array
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

levels of contents
点击右上角即可分享
微信分享提示