[問題] 關於Thread與Coroutine的問題

看板C_and_CPP作者 (電費不繳)時間9年前 (2016/11/26 14:15), 9年前編輯推噓6(6013)
留言19則, 11人參與, 最新討論串1/1
最近在研究coroutine這個東西,以前的計算機組織的盲點瞬間浮現出來。 就我目前的理解,每一個process至少會開一條main thread來向OS請求CPU的使用權, 而假如不考慮Hyper-Threading的技術下,每一個Core同時應該只會有一個執行緒在運作, 因此OS會透過排程的方式來決定thread的分配,有需要取代時會有context-switch產生。 我目前的問題是,目前我的電腦假如是4核心,那為什麼我可以同時開4個以上的音樂播放器來播放音樂, 猜測是透過Time Sharing的方式,但是假如是這樣的話,我應該可以明顯聽出來每一首歌會斷斷續續才對吧? 另一個是和coroutine有關的問題, 日前是讀到https://goo.gl/47M4QP 這篇文章 他最後一個例子是使用Async與Coroutine的配合, Async是指他會在背後開一條新的thread來幫我做我分配給他的事情嗎? 在來是Async如何與Coroutine溝通?因為Coroutine假如回到main thread後,他要如何知道背後的async事件是否已經完成了? 謝謝各位 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.123.97.47 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1480140925.A.2F9.html

11/26 14:18, , 1F
耳朵沒那麼厲害...
11/26 14:18, 1F
所以背後是真的進行了多次的context-switch,只是速度過快人耳無法分辨這樣嗎? ※ 編輯: ArcherState (140.123.97.47), 11/26/2016 14:21:29

11/26 14:23, , 2F
用耳朵跟CPU比速度?
11/26 14:23, 2F

11/26 14:23, , 3F
現在的async都是用dma去做吧,不會開別的thread
11/26 14:23, 3F

11/26 14:24, , 4F
如果你同時撥放幾百萬的因為,應該就聽得出來
11/26 14:24, 4F

11/26 14:25, , 5F
音樂
11/26 14:25, 5F

11/26 14:38, , 6F
只講音樂的話 我會猜mixer driver和音效卡有熱線
11/26 14:38, 6F

11/26 14:41, , 7F
那單純Coroutine是算單Thread嗎?因為有文章說Lua的
11/26 14:41, 7F

11/26 14:41, , 8F
Cortoutine也是一種Thread物件
11/26 14:41, 8F

11/26 14:50, , 9F
音樂是khz,可是cpu可是ghz呢
11/26 14:50, 9F

11/26 15:31, , 10F
音效卡有buffer,CPU只要負責塞資料進去就好了
11/26 15:31, 10F

11/26 15:32, , 11F
用CPU做即時音效處理炸音多的是
11/26 15:32, 11F

11/26 17:51, , 12F
這篇文章跟C/C++的關聯是?
11/26 17:51, 12F

11/26 17:51, , 13F
雖然我對本主題感興趣,但還是請補上關聯點。
11/26 17:51, 13F

11/26 19:04, , 14F
coroutine 是一種特別的 user-level thread
11/26 19:04, 14F

11/26 19:06, , 15F
一般的thread不會定義中斷點(yield)
11/26 19:06, 15F

11/26 19:06, , 16F
但coroutine需要自行定義中斷位置
11/26 19:06, 16F

11/26 21:13, , 17F
coroutine 只是一種概念 跟thread沒什麼關係
11/26 21:13, 17F

11/27 11:59, , 18F
你播5首耳朵就錯亂了啦,應該是聽不出來
11/27 11:59, 18F

11/27 22:23, , 19F
azure正解
11/27 22:23, 19F
文章代碼(AID): #1OEIXzBv (C_and_CPP)