最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

自稱懂多線程?那你敢解釋清楚 sleep(0) 對(duì) CPU 調(diào)度的影響嗎?

標(biāo)簽:
Java JavaScript

原文来自于:https://zha-ge.cn/java/89

自称懂多线程?那你敢解释清楚 sleep(0) 对 CPU 调度的影响吗?

说来惭愧,这事儿一开始我真当是冷门八股,没想到最后差点被自己坑一把。事情是这样的:

前段时间改一个老同事写的多线程工具类,里面有段“神秘”的代码:

while (!stop) {
    // 业务处理
    // ...
    Thread.sleep(0);
}

当时一脸懵逼:sleep(0)?这不是一行“啥也没干”的代码嘛?直接删了不香吗?但工程师经验告诉我——敢写到生产库里的很可能有坑,还是查查吧。结果这一查,不查不知道,一查差点出事……

猪队友?还是有未解玄机?

有些人一提多线程就是 synchronized、volatile、乐观锁、死锁八股文狂背,但问他 Thread.sleep(0) 的“奥义”,基本翻车。查官方文档,Java 的 Thread.sleep(0) 声称让线程休眠“0ms”——理想状态下,好像什么都不会发生。但 JVM 江湖,从来都没这么简单。

  • 有人说它啥也不干,相当于空气。
  • 也有人说它会触发一次线程调度,给别人让个位。
  • 还有说不同操作系统有不同表现。

梳理一下核心说法:

  • 微软 JVM/Windows:sleep(0) 意味当前线程放弃剩余时间片,如果有其他同优先级线程在等待,就会让它们先跑。
  • Linux/HotSpot:很多实现下,sleep(0) 基本等于啥都不做——线程继续跑。
  • 其他 JVM,还得看具体厂商有没有祖传黑魔法。

调皮点说,sleep(0) 就像班级里“假积极分子”,嘴上说“老师,我让让别人发言”,但其实一个人能不能下讲台,全看老师(操作系统/调度器)当不当回事。

踩坑瞬间

你以为睡0毫秒就不会有副作用?呵!说多了都是泪。说两个“活生生”掉进的坑:

  1. 怪异CPU飙高
    有人把 sleep(0) 当“循环体减速器”,结果线程一直转,CPU 高得离谱,老板问你是不是在挖矿?
  2. 线程饿死现场
    一些 JVM 下,线程 A 永远在跑,因为 sleep(0) 根本没让过位,其他线程苦哈哈排队,等也等不到机会。
  3. 异地行为
    本地 Windows 跑得美滋滋,线上 Linux 环境直接翻车。为啥?sleep(0) 本地真能切给别人,线上却变成咸鱼一条。

反正我亲自试了,跨平台整个不可控,简直比相亲还刺激。

经验启示

讲真的,这种“看似无害”的小操作,说不定能引发团队血案。给大家总结下我的心得,省得以后再掉坑:

  • 跨平台开发别用 sleep(0)
    千万别存侥幸:它在你的开发机(比如 Windows)表现不一定在线上 Linux 复现。
  • 真的想让线程主动让位?用 yield()!
while (!stop) {
    // ...
    Thread.yield();
}

yield() 诚实得多,明确告诉调度器我主动让出时间片,至于是否安排别人,那就看 OS 乐意不乐意了。

  • 想降低CPU?加 sleep(1) 或合理等待
    日常 while(true) -> sleep(1),哪怕1毫秒,都远比0靠谱,无脑转圈毁CPU,老板钱包受伤。
  • 碰见“不明觉厉”的历史代码,先查官方文档+实测
    年轻人,有些“神秘注释掉”往往是前任被打脸无数次后的无奈选择。

扯皮收尾

写到这都有点盯花眼了。回头看看,这玩意只有没被“奇葩生产环境暴击”过的才敢嘲笑它无聊。从此见到 sleep(0),先三思,不要盲删——毕竟程序员的锅,锅锅相传,能避一点是一点吧!

最后一句,别自称多线程高手,连 sleep(0) 都没实验过。赶紧试试自己项目到底什么表现,别等 CPU 又炸了才想起来谁的鬼手笔~

—— 欠代码的夜,一个差点挖坑给自己填的憨批 Javaer

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消