当前位置: 首页 > wzjs >正文

长治在网络做推广网站主题及样式优化

长治在网络做推广,网站主题及样式优化,临沂建设企业网站,shopify建站教程文章目录 多线程下自旋锁的行为逻辑1 自旋锁的基本逻辑2 线程状态分析3 自旋锁缺点4 自旋锁优化方式5 多核场景总结 多线程下自旋锁的行为逻辑 如果是自旋锁(spinlock)逻辑,当一个线程已经持有锁时,其他线程会不断尝试获取锁&…

文章目录

  • 多线程下自旋锁的行为逻辑
    • 1 自旋锁的基本逻辑
    • 2 线程状态分析
    • 3 自旋锁缺点
    • 4 自旋锁优化方式
    • 5 多核场景
    • 总结

多线程下自旋锁的行为逻辑

如果是自旋锁(spinlock)逻辑,当一个线程已经持有锁时,其他线程会不断尝试获取锁,处于“忙等(busy-waiting)”状态,不会主动休眠、挂起或进入阻塞态,除非你显式地这么写。


1 自旋锁的基本逻辑

std::atomic_flag lock = ATOMIC_FLAG_INIT;void lock_spin() {while (lock.test_and_set(std::memory_order_acquire)) {// 自旋:啥也不做,继续尝试获取锁}
}void unlock_spin() {lock.clear(std::memory_order_release);
}
  • test_and_set() 会原子地设置 locktrue,并返回旧值。
  • 如果另一个线程已设置 lock = true,那么当前线程会进入 while 循环 —— 这就是“忙等”。
  • 自旋期间线程不会释放 CPU,也不会进入 sleep 或 yield,仍然在占用计算资源。

2 线程状态分析

线程状态说明
持锁线程正常执行,直到 unlock()
自旋线程CPU 上循环尝试获取锁(高 CPU 占用),处于 Running 状态
阻塞线程不是自旋锁的行为,阻塞/挂起是互斥锁或条件变量做的事

在操作系统中,自旋线程的状态在调度器眼中通常是 “running”,如果被抢占则为 “ready”,而不是 “waiting” 或 “sleeping”。


3 自旋锁缺点

  • CPU 浪费大:线程处于忙等状态,浪费 CPU 周期。
  • 在多核下高竞争时非常低效。
  • 如果持锁线程长时间执行(或阻塞),自旋线程将毫无意义地消耗资源。

4 自旋锁优化方式

  1. 加上 pause/yield 提示 CPU 优化自旋:
while (lock.test_and_set(std::memory_order_acquire)) {std::this_thread::yield();  // Hint 给操作系统让出 CPU
}
  1. 自旋 + 回退 + sleep(适合高争用):
int count = 0;
while (lock.test_and_set(std::memory_order_acquire)) {if (++count > 1000) {std::this_thread::sleep_for(std::chrono::microseconds(10));  // 主动退让}
}

5 多核场景

  1. 可以有多个线程处于“运行态”吗?

可以有多个线程处于“就绪态(ready)”或“运行态(running)”,但实际同时运行的线程数量受限于 CPU 核心数。

  • 操作系统的线程调度器会维护多个状态:

    • Running:正在某个 CPU 核上执行。
    • Ready:准备好运行,但暂时没分配到 CPU。
    • Waiting/Sleeping/Blocked:在等 I/O、锁、条件变量等。
  • 如果你的系统是 4 核 CPU,那么最多可以同时运行 4 个线程(真正的并行)。

  • 其他线程即使“处于运行态”,但本质上是 ready 状态,被 OS 调度器等待调度。

  1. CPU 怎么决定“分配给谁”?
    由操作系统的 线程调度器(scheduler) 决定。调度策略有多种:
策略描述
时间片轮转(round-robin)每个线程轮流使用 CPU
优先级调度优先级高的线程更容易获得 CPU
多队列反馈结合线程运行情况动态调整优先级

调度器会考虑:

  • 线程优先级(nice 值、real-time 等)
  • 当前负载(load balancing)
  • CPU cache affinity(避免 cache miss)
  • 多核负载均衡(尽量让线程平均分布到各个核心)
  1. 多核 CPU 下的多线程运行模型
  • 多核 = 真正的“并行”执行

如果你有 8 核 CPU,你的 8 个线程可以真正在同一时间点并行执行,每个线程占用一个核心。线程之间通过共享内存、缓存一致性协议(如 MESI)等机制保持同步。

示例:4 个线程,4 核 CPU

时间核心 0核心 1核心 2核心 3
T0线程 A线程 B线程 C线程 D
T1线程 A线程 B线程 E线程 F

同时最多执行 4 个线程,剩下的在线程队列中等待调度。

  1. 自旋锁下,多线程抢锁是怎样的?
  • 每个核心上的线程在同时执行 while (lock.test_and_set()),此时所有核的线程都在自旋。
  • 哪个线程在某一时刻成功把 lock 从 false 设置为 true,它就赢得了执行权,进入临界区。
  • 其他线程仍然自旋,不会被挂起。
  1. 举个真实案例:8线程自旋 + 4核 CPU

  2. 线程 A 拿到自旋锁。

  3. 线程 B~H 也在尝试拿锁,它们会在各自 CPU 核或被调度时执行 while 自旋。

  4. 一旦线程 A 执行完 unlock(),调度器从剩下的线程中挑选一个抢锁成功。

  5. 其余线程继续自旋。


总结

情况自旋锁表现
锁未被持有线程获取锁,正常执行
锁被持有自旋线程持续运行,占用 CPU
高并发场景多线程争用,自旋浪费严重
最佳用途锁持有时间非常短的临界区,如 CPU 缓存级并发控制
问题回答
多个线程可以运行吗?可以,但并发度受限于 CPU 核数
谁获得 CPU 执行?操作系统调度器决定,基于策略
多核是怎么处理多线程的?各核独立运行线程,实现真正并行
自旋锁时线程状态?在运行或就绪态,不会自动 sleep

文章转载自:

http://CTCdnZr1.mjynx.cn
http://nKkv3G8d.mjynx.cn
http://oqvySFtu.mjynx.cn
http://u0QmtMU5.mjynx.cn
http://I8MQRv8h.mjynx.cn
http://VdINamTc.mjynx.cn
http://QeKZmVC8.mjynx.cn
http://bVVJpiOf.mjynx.cn
http://rPjcfqC9.mjynx.cn
http://1ySur8Lr.mjynx.cn
http://QyMz5fJu.mjynx.cn
http://WCje5rpt.mjynx.cn
http://dqbmNh6W.mjynx.cn
http://jfgZBMtj.mjynx.cn
http://x3ChFcCz.mjynx.cn
http://XeRanJxQ.mjynx.cn
http://tTiVm6nH.mjynx.cn
http://9VqyAXeo.mjynx.cn
http://Jdo5wIwa.mjynx.cn
http://ipuaMPWV.mjynx.cn
http://oGo3qXC0.mjynx.cn
http://27oShnA4.mjynx.cn
http://CxStV95K.mjynx.cn
http://EJ7ZvznB.mjynx.cn
http://MgxmPFv3.mjynx.cn
http://Yzxt9ooM.mjynx.cn
http://5PuvtSB9.mjynx.cn
http://IL9bVOmh.mjynx.cn
http://jMsgS01F.mjynx.cn
http://BjcBicHq.mjynx.cn
http://www.dtcms.com/wzjs/687164.html

相关文章:

  • 奉贤网站开发连云港企业网站建设公司
  • 企业型网站制作国家能源招标网
  • seo网站建设视频教程wordpress 同步到微博
  • wap网站为什么没有了东莞网站推广建设
  • 免费网站安全软件大全wordpress代码编辑插件
  • 济南网站建设公司送400做网站 图片更好看
  • 外贸网站建设公司咨询做编程网站有哪些
  • 生肖竞猜网站建设网站设计基本原则
  • 网站基站的建设方案公众号文章怎么导入到wordpress
  • 深圳专业网站开发小程序源码提取
  • 中国广告网站本地网站可以做吗?
  • 网站建设的功能描述教你学做窗帘的网站
  • 苏州市网站建设培训wordpress子主题引用js
  • 网站建设与管理ppt课件百度云盘做宣传类网站需要什么资质
  • wordpress视频站模板wordpress文章中加入代码段
  • html5做宠物饲养网站深圳航空公司官方网站首页
  • 怎样做摄影网站net framework可以用来做网站吗
  • 微餐饮网站建设平台欧美普货专线是快递吗
  • 陕西网站建设厦门网站制作门户网站需要多少空间
  • wordpress网站空间谷歌做公司网站需要多少钱
  • 以前老网站网站公共模板是什么意思
  • 基于推荐算法的网站开发k8s wordpress mysql
  • 益阳市 网站建设兰溪自适应网站建设特点
  • 建设网站需要的资料制作的网站图片不显示
  • 注册城乡规划师难考吗seo助力网站转化率提升
  • 做胃镜多少钱那好天津津门网站a噼哩噼哩pilipili污染版
  • 网络营销方式有哪些重庆企业seo网络推广外包
  • 网站建设流程步骤为什么要建手机网站
  • 一学一做看视频网站搜索引擎营销方案
  • 这么做网站原型图wordpress 舆情管理系统