天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

并發(fā)編程的 15 條建議(譯)

  1. Know your cold paths from your hot paths. 弄清楚代碼里的熱門(mén)執(zhí)行路徑和冷門(mén)執(zhí)行路徑。

  對(duì)冷門(mén)路徑,用粗粒度的鎖即可。對(duì)熱門(mén)路徑——也就是那些必須高度并發(fā)才能實(shí)現(xiàn)所期望的高吞吐量的代碼,應(yīng)該更加小心,加鎖的策略必須簡(jiǎn)單明了且細(xì)粒度。

  2. Intuition is frequently wrong—be data intensive. 直覺(jué)常常是錯(cuò)的,要靠數(shù)據(jù)說(shuō)話。

  【陳碩】比如線程切換到底有多大開(kāi)銷,普通 mutex 加鎖到底有多大代價(jià),系統(tǒng)調(diào)用的開(kāi)銷如何,gettimeofday() 在 x86-64 Linux 是不是真的系統(tǒng)調(diào)用等等,都要靠數(shù)據(jù)說(shuō)話。

  3. Know when—and when not—to break up a lock. 知道什么時(shí)候把一個(gè)鎖拆成多個(gè),并知道什么時(shí)候不必這樣做。

  除了把全局鎖拆成多個(gè)鎖,另外一種常用的避免線程爭(zhēng)用 (contention) 的辦法是減少加鎖的范圍。比方說(shuō)從共享的數(shù)據(jù)結(jié)構(gòu)里移除(remove and delete)元素,其實(shí) delete 這一步可以放到鎖外面。

  4. Be wary of readers/writer locks. 警惕讀寫(xiě)鎖。

  初學(xué)者常犯的一個(gè)錯(cuò)誤是,見(jiàn)到某個(gè)數(shù)據(jù)結(jié)構(gòu)頻繁讀而很少寫(xiě),那么就把 mutex 替換為 rwlock。這不見(jiàn)得是正確的。【陳碩】這條深得我心,muduo thread lib 目前就沒(méi)有提供讀寫(xiě)鎖的封裝。另外,這一條也能鑒別另一篇關(guān)于線程爭(zhēng)用的文章不靠譜。

  5. Consider per-CPU locking. 考慮用每個(gè) CPU 用一個(gè)鎖。

  6. Know when to broadcast—and when to signal. 知道什么時(shí)候用單個(gè)喚醒,什么時(shí)候用廣播喚醒。

  notifyAll() 通常表示狀態(tài)變更,而 notify() 通常表示資源變得可用。濫用 notifyAll() 會(huì)導(dǎo)致驚群現(xiàn)象。【陳碩】 muduo thread lib 的 ThreadPool 區(qū)分使用 notify() 和 notifyAll(),可作參考。

  7. Learn to debug postmortem. 學(xué)會(huì)驗(yàn)尸。

  【陳碩】 在程序中只使用 Scoped locking 來(lái)加鎖的話,很容易從 call stack 查出死鎖。參考《多線程服務(wù)器的常用編程模型》第 6 節(jié) 線程間同步

  8. Design your systems to be composable. 設(shè)計(jì)系統(tǒng),使之能擴(kuò)充。

  【陳碩】 比方說(shuō),把對(duì)對(duì)象的修改操作都挪到同一個(gè)線程,這樣就不必加鎖。參考 muduo 的 EventLoop::runInLoop()。

  9. Don’t use a semaphore where a mutex would suffice. 如果 Mutex 就能解決問(wèn)題的話,不要使用信號(hào)量 semaphore。

  【陳碩】muduo thread lib 有意識(shí)地不提供信號(hào)量的封裝。

  10. Consider memory retiring to implement per-chain hash-table locks. 考慮用內(nèi)存“退休”法來(lái)實(shí)現(xiàn)哈希表的按桶加鎖。

  11. Be aware of false sharing. 知道什么是偽共享。

  跟多 CPU 的 Cache 有關(guān),值得了解。

  12. Consider using nonblocking synchronization routines to monitor contention. 考慮使用非阻塞的加鎖來(lái)觀察線程爭(zhēng)用。

  13. When reacquiring locks, consider using generation counts to detect state change. 在重新加鎖時(shí),考慮使用版本號(hào)來(lái)檢測(cè)狀態(tài)變更。

  14. Use wait- and lock-free structures only if you absolutely must. 只在別無(wú)它法時(shí)才使用無(wú)鎖數(shù)據(jù)結(jié)構(gòu)。

  15. Prepare for the thrill of victory—and the agony of defeat. 準(zhǔn)備接受成功的喜悅和失敗的痛苦。

  更詳細(xì)的解釋請(qǐng)看原文。Bryan Cantrill 是 dtrace 的主要作者,Jeff Bonwick 是 ZFS 和 Slab allocator 的發(fā)明者。

it知識(shí)庫(kù)并發(fā)編程的 15 條建議(譯),轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 艳照门在线播放 | 亚洲不卡视频在线 | 第一次破女初国产美女 | 天天躁日日躁狠狠躁中文字幕老牛 | 忘忧草在线社区WWW日本直播 | 亚洲综合AV色婷婷五月蜜臀 | 免费成年人在线观看视频 | 国产亚洲精品久久久久久久软件 | bbwvideos欧美老妇 | 女王黄金vk | 日韩一区二区三区视频在线观看 | 精品无人区麻豆乱码1区2 | 小草视频免费观看在线 | 玖玖爱精品视频 | 亚洲午夜精品A片久久软件 亚洲午夜精品A片久久不卡蜜桃 | 黄色网址在线免费观看 | 国内精品视频久久久久免费 | 小处雏一区二区三区 | 成人影院午夜久久影院 | 国产在线观看黄 | 亚洲蜜桃AV色情精品成人 | 欧洲精品一区二区不卡观看 | 日日干夜夜艹 | 亚洲色欲啪啪久久WWW综合网 | 成人性视频全过程 | 99久久国语露脸精品国产 | 久久精品电影 | 亚洲蜜芽在线观看精品一区 | a4you销魂gogo人体 | 国产99久久久国产精品免费看 | 亚洲午夜精品久久久久久抢 | 麻豆国产精品久久人妻 | 成人性生交片无码免费看 | 精品国产在线手机在线 | 99久久精品久久久久久清纯 | 久久天天躁狠狠躁夜夜躁 | 十大禁止安装的黄台有风险 | 色欲人妻AAAAAAA无码 | 99热.com| 国产亚洲中文字幕视频 | 野草观看免费高清视频 |