C_and_CPP 板


LINE

trace了一下, launch::deferred|launch::async模式下 確實可以跑到::Concurrency::create_task, 但它是使用整套的PPL(含threadpool) 還是局部的PPL功能? http://imgur.com/PFSbkJd 查了一下, PPL是Microsoft Concurrency Runtime中的其中一塊 https://msdn.microsoft.com/en-us/library/ee207192.aspx 那linux下的std::async是使用什麼機制? 跟windows一樣嗎? 會這麼問, 是因為std開頭的應該是standard library, 是否會因為os而有改變? ※ 引述《Caesar08 (Caesar)》之銘言: : 原本要回你信,後來想說直接放版上好了,以便讓其他人看(也讓別人糾正自己的錯誤) : 如果你仔細讀 : http://en.cppreference.com/w/cpp/thread/async : 你就會發現如果是用launch::async, : "async executes the function f on a new thread of execution (with all thread-l : oc : 也就是說他的執行會 像 直接construct thread一樣 : 問題來了,這個像真的就會如同construct thread一樣嗎? : 首先,需要先知道,每個CPU有最大能提供的threads數量(簡稱CPU threads) : 而每個作業系統也有最大能提供的threads數量(簡稱OS threads) : 如果在程式construct過多thread(如同你的arrayCount),有可能會導致system_error : ,? : 1. 你已經把所有OS threads都用完了 : 2. 你的OS有限制process能使用的threads數量 : 假設system_error的情況都沒有,那你還會面對別的問題,context switch : 一旦你的construct threads的數量大於CPU threads,就會需要context switch : context switch會增加程式執行時間,因為 : 1. 它減少每個threads能使用的時間 : 2. context switch本身就需要時間,而它成本不低 : 講了那麼多,那async可以做什麼? : 原因是async本身可以幫你解決掉context switch所產生的問題 : (如果你是用launch::async|launch::deferred,那還可以解決system_error的問題) : 雖然說async的行為 像 直接construct thread,但它內部如果只用固定N個threads輪流 : 執? : 那他就不需要context switch,所以async可以更快 : std::thread因為有提供native_handle,它可以做更多async做不到的事情(例如設定pri : or : (而且thread每次construct都需要system call,async可以用threadpool解決這問題) : 如果你不需要用native_handle,那你就應該使用async : 或是你可以自己寫threadpool來使用(或是用intel TBB,感謝LiloHuang補充) : 但我目前沒看到有好的threadpool可以滿足以下四點 : 1. exception safety : 2. work stealing : 3. pure C++ : 4. thread-safe(這看起來好像很基本,但github搜索threadpool第一頁的 : 第3(nbsdx)與第5(tghosgor)的threadpool都沒做到) : 即便是我自己寫的threadpool,目前1與2都沒做到(1快做到了) : 即使都做到了,也還有dynamic resize threadpool可以研究 : 另外,關於你說的 : : 我想std::thread應該也是在new thread中執行, 但難道它是以同步的方式嗎? : 所有thread應該都算是asynchronous(非同步) : 但是asynchronous本來是用來形容IO的 : 你拿asynchronous形容thread的執行方式,好像怪怪的 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.174.208.101
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1461084410.A.9E9.html
1F:→ EdisonX: std 開頭的在不同 os 下的確很可能做法不同. 04/20 02:29
2F:→ Caesar08: 會 04/20 09:08
3F:推 LiloHuang: 透過 create_task 建立 task 後會用 ThreadPool 來跑 04/20 09:49
4F:→ LiloHuang: 詳見 MSDN Key Points 第二點 https://goo.gl/Vu2Uht 04/20 09:49
5F:推 fatrabitree: Stl只管行為 不管實作吧 04/20 14:03
6F:→ a2975313: 請問如何查到STL對std::acyns的定義? 05/09 00:46







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP