Go-style concurrency in C
Libmill is a library that introduces Go-style concurrency to C.
It can execute up to 20 million coroutines and 50 million context switches per second.
| Go | C |
| go foo(arg1, arg2, arg3) | go(foo(arg1, arg2, arg3)); |
| ch := make(chan int) | chan ch = chmake(int, 0); |
| ch := make(chan int, 1000) | chan ch = chmake(int, 1000); |
| ch <- 42 | chs(ch, int, 42); |
| i := <- ch | int i = chr(ch, int); |
| close(ch) | chdone(ch, int, 0); |
| <garbage collector> | chclose(ch); |
| select { case ch <- 42: foo() case i := <- ch: bar(i) default: baz() } |
choose { out(ch, int, 42): foo(); in(ch, int, i): bar(i); otherwise: baz(); end } |
If you would prefer the same functionality with C-idiomatic API check libdill.
Libmill is licensed under MIT/X11 license.