作者ArcherState (電費不繳)
看板C_and_CPP
標題[問題] 關於Thread與Coroutine的問題
時間Sat Nov 26 14:15:21 2016
最近在研究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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1480140925.A.2F9.html
1F:→ Caesar08: 耳朵沒那麼厲害... 11/26 14:18
所以背後是真的進行了多次的context-switch,只是速度過快人耳無法分辨這樣嗎?
※ 編輯: ArcherState (140.123.97.47), 11/26/2016 14:21:29
2F:推 stupid0319: 用耳朵跟CPU比速度? 11/26 14:23
3F:→ Caesar08: 現在的async都是用dma去做吧,不會開別的thread 11/26 14:23
4F:→ Caesar08: 如果你同時撥放幾百萬的因為,應該就聽得出來 11/26 14:24
5F:→ Caesar08: 音樂 11/26 14:25
6F:推 Yshuan: 只講音樂的話 我會猜mixer driver和音效卡有熱線 11/26 14:38
7F:→ ArcherState: 那單純Coroutine是算單Thread嗎?因為有文章說Lua的 11/26 14:41
8F:→ ArcherState: Cortoutine也是一種Thread物件 11/26 14:41
9F:推 TeaEEE: 音樂是khz,可是cpu可是ghz呢 11/26 14:50
10F:→ azureblaze: 音效卡有buffer,CPU只要負責塞資料進去就好了 11/26 15:31
11F:→ azureblaze: 用CPU做即時音效處理炸音多的是 11/26 15:32
12F:→ wtchen: 這篇文章跟C/C++的關聯是? 11/26 17:51
13F:→ wtchen: 雖然我對本主題感興趣,但還是請補上關聯點。 11/26 17:51
14F:推 littleshan: coroutine 是一種特別的 user-level thread 11/26 19:04
15F:推 littleshan: 一般的thread不會定義中斷點(yield) 11/26 19:06
16F:→ littleshan: 但coroutine需要自行定義中斷位置 11/26 19:06
17F:→ firejox: coroutine 只是一種概念 跟thread沒什麼關係 11/26 21:13
18F:推 DirKai: 你播5首耳朵就錯亂了啦,應該是聽不出來 11/27 11:59
19F:→ michael0728n: azure正解 11/27 22:23