code wiki / (root) / nx_poolheavy.nx

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}