nx_poolheavy.nx source
↩ module page · 28 lines · 895 B
1// compute-heavy nx_thread_pool demo: 4 tasks x 400M-iter LCG, 4 workers. Probe should read ~4 cores -- proving
2// the (atomics-unblocked) lock-free thread_pool delivers real multi-core.
3import "nx_thread_pool.nx"
4const K_MAGIC_400000000: i64 = 400000000
5const K_MAGIC_1103515245: i64 = 1103515245
6const K_MAGIC_12345: i64 = 12345
7const K_MAGIC_2147483647: i64 = 2147483647
8
9static g_out: *i64
10
11func heavy_task(ctx: i64) -> i64 {
12 var s: i64 = ctx + 1
13 var j: i64 = 0
14 while j < K_MAGIC_400000000 { s = (s * K_MAGIC_1103515245 + K_MAGIC_12345) & K_MAGIC_2147483647; j = j + 1 }
15 g_out[ctx] = s
16 return 0
17}
18
19func main() -> i64 {
20 g_out = sys_mmap(64) as *i64
21 let pool: *NxThreadPool = nx_pool_new(4, 64)
22 var k: i64 = 0
23 while k < 4 { nx_pool_submit(pool, heavy_task, k); k = k + 1 }
24 nx_pool_wait(pool, 4)
25 nx_pool_shutdown(pool)
26 sys_exit(0)
27 return 0
28}