並發基礎練習題 (Practice - Concurrency Fundamentals)


Question 1 - 並發的定義 [recall]

請說明「並發」的一般定義,以及它在電腦系統中的意義。


Question 2 - 任務切換 vs 硬體並發 [recall]

單核機器只有一個處理核心,為什麼仍能「同時」執行多個應用程式?這與多核機器的並發有何本質差異?


Question 3 - Context switch 成本 [recall]

進行一次任務切換 (context switch) 時,作業系統必須做哪些工作?為什麼會造成延遲?


Question 4 - 多行程 vs 多執行緒 [recall]

比較多行程並發與多執行緒並發在通訊方式、開銷與安全性上的差異;C++ 標準對哪一種提供原生支援?


Question 5 - 並發與平行的關注點 [recall]

「並發」與「平行」大部分重疊,那麼兩個詞各自強調的關注點是什麼?


Question 6 - 抽象懲罰 [recall]

什麼是抽象懲罰 (abstraction penalty)?C++ 標準委員會設計執行緒庫時對它的目標是什麼?


Question 7 - DVD 播放器的執行緒設計 [application]

你要開發一個 DVD 播放程式,需同時進行影音解碼播放與回應使用者的「暫停/返回選單/退出」操作。單執行緒與多執行緒設計各長什麼樣?你會選哪個?


Question 8 - 最小多執行緒程式 [application]

寫出一個啟動新執行緒印出訊息的最小 C++ 程式,並說明若省略 t.join() 可能發生什麼事。


Question 9 - 任務平行 vs 資料平行 [analysis]

影像處理程式有兩種平行化方案:(a) 把單張圖的濾鏡演算法拆成多個階段並行;(b) 同時對 20 張不同的圖套用相同濾鏡。各屬於哪種平行?哪種通常更容易擴展、為什麼?


Question 10 - 每連線一執行緒的極限 [analysis]

一台 32-bit 伺服器對每個客戶端連線啟動一條執行緒(每條 1MB 堆疊)。分析連線數成長到數千時會發生什麼問題,並提出改善方向。