2016q3 Homework2(phonebook-concurrent)
contributed by <LitSnow
>
開發環境
- CPU: Intel® Core™ i5-3337U CPU @ 1.80GHz
- MEM : 8GB
- cache:
- L1d cache:32K
- L1i cache:32K
- L2 cache:256K
- L3 cache:3072K
- Linux version 4.4.0-21-generic
Concurrency 資料閱讀
- Concurrency v.s Parallelism
- Concurrency:2 個任務分配到 1 個CPU核心,在各自取得的時間片段中交互執行 ,這兩個任務可以完全不相關
- Parallelism:2 個任務分配到 2 個CPU核心,同時執行。或是 1 個任務用 2 個CPU核心去執行
- Concurrency必須著重 thread 之間的互動與溝通
Code Refactoring
只 free 了兩個 node
改成
掃描所有 node , 將其 free 掉
第 3 行和第 7 行可以看出迴圈從 head 指向的下一筆資料開始執行 , 故把這兩行的->lastName
刪除
改成
範例程式碼
- 測試結果
-
thread_num = 1

-
thread_num = 2

-
thread_num = 4

-
thread_num = 8

-
thread_num = 16

-
thread_num = 1024

- 分析
- thread 太多導致執行時間更慢,研判是過多的 context switch 造成的
不能只有貼圖,要解釋時間變化怎麼來的,以及你接下來要做什麼。工程人員要解決問題! jserv
參考資料