目的: 檢驗學員對並行和多執行緒程式設計的認知
1
考慮我們嘗試建構 lock-free 的 MPMC broadcast queue、依循 Publish–subscribe 模式,程式碼可見 broadcast,其中 pool.[ch]
是 lock-free memory pool。
編譯方式:
$ gcc -Wall -O2 -D_GNU_SOURCE \
-o stress \
stress.c \
broadcast.c \
pool.c \
-lpthread
參考執行輸出:
Test: 1pub0sub
Pub Thread 0 | n_msgs: 100000 n_drops: 0 | 169 ns/msg
Test: 2pub0sub
Pub Thread 0 | n_msgs: 100000 n_drops: 0 | 519 ns/msg
Pub Thread 1 | n_msgs: 100000 n_drops: 0 | 416 ns/msg
Test: 4pub0sub
Pub Thread 0 | n_msgs: 100000 n_drops: 0 | 945 ns/msg
Pub Thread 1 | n_msgs: 100000 n_drops: 0 | 965 ns/msg
Pub Thread 2 | n_msgs: 100000 n_drops: 0 | 952 ns/msg
Pub Thread 3 | n_msgs: 100000 n_drops: 0 | 967 ns/msg
Test: 4pub0sub
Pub Thread 0 | n_msgs: 100000 n_drops: 0 | 2800 ns/msg
Pub Thread 1 | n_msgs: 100000 n_drops: 0 | 3015 ns/msg
Pub Thread 2 | n_msgs: 100000 n_drops: 0 | 3065 ns/msg
Pub Thread 3 | n_msgs: 100000 n_drops: 0 | 3060 ns/msg
Pub Thread 4 | n_msgs: 100000 n_drops: 0 | 3062 ns/msg
Pub Thread 5 | n_msgs: 100000 n_drops: 0 | 3033 ns/msg
Pub Thread 6 | n_msgs: 100000 n_drops: 0 | 3021 ns/msg
Pub Thread 7 | n_msgs: 100000 n_drops: 0 | 3043 ns/msg
AAAA, BBBB, CCCC, DDDD, EEEE, FFFF 皆為變數名稱