使用Posix线程实现的coroutine
协程的关键在于栈的保存沿用,有很多其他版本的C实现的coroutine,如:setcontex, setjmp/longjmp。我认为线程拥有自己的数据栈,天然提供栈的沿用,再利用pthread_mutex_t, pthread_cond_t来做异步唤醒,那pthread一定也可以实现coroutine。 所以我就写了这个库。写的匆忙,质量不高,一定还存在很多问题,欢迎大家提pr。
做了一下测试,与setcontext的coroutine对比,pthread的coroutine大概慢了10倍。在写之前就知道效率一定不高,因为cpu把大量时间浪费在了线程切换上。