ezCoroutine協(xié)程原型庫只是個原型庫,但是已經(jīng)能夠支持1000K以上數(shù)量的協(xié)程運行,而且是stackful模式?;镜膶ν饨涌谟袃深?,一類是類似Posix線程的接口:協(xié)程創(chuàng)建threadCreat,協(xié)程回收threadJoin,調(diào)度函數(shù)switch_to;另外一類是類似lua協(xié)程接口,但是有所不同,我們的返回規(guī)則更加簡單,所以功能也有所限制:掛起協(xié)程yield,恢復協(xié)程resume;然后是一些輔助函數(shù)接口:通過協(xié)程號尋找到協(xié)程結(jié)構體函數(shù)findThread,初始化協(xié)程函數(shù)init,銷毀協(xié)程函數(shù)destroy,destroyAll函數(shù),以及printThread,printLoop,printSharedStack等打印函數(shù)。
具體代碼放在GitHub上:https://github.com/Yuandong-Chen/ezCoroutine
注意,該庫只能在X86/X64 Linux環(huán)境下用gnu/gcc集成的編譯工具(不能用llvm/clang),代碼只支持32位,得用-m32參數(shù),而且得加上-fno-stack-protector參數(shù)關閉棧檢測機制,否則我不能保證不出現(xiàn)bus IO error 和 segment fault。因為具體實現(xiàn)我用了一些特殊的手段,smash了棧空間,以后會逐步改善。
下面通過幾個問題來介紹:
1.怎么用這個協(xié)程庫呢?
這里給出經(jīng)典的生產(chǎn)者-消費者模式的例子:
1 /************************* T