协程库state threads library(以下简称st)是一个基于setjmp/longjmp实现的C语言版用户线程库或协程库(user level thread)。基本介绍在这 http://state-threads.sourceforge.net/docs/st.html。这里有一个基本的协程例子 http://www.csl.mtu.edu/cs4411.ck/www/NOTES/non-local-goto/coroutine.html, 可以了解setjmp和longjmp的基本用法。如还有不懂,请自行查阅其他资料。
从中可以看出,IA(Internet Application)架构演化历史:
1.多进程MP
以Apache为代表的web server。创建进程服务新用户,开销过高。调度单位是进程。
2.多线程MT
创建新线程服务新用户,线程间上下文切换,锁竞争等等,增加了额外开销。调度单位是线程。
3.事件驱动状态机EDSM
基于IO复用机制,实现大量并发请求的处理。但程序是一体的,并不是基于线程,新程序需要从头开始。该模式下主要使用回调和状态参数来进行上下文切换,实际上是以一种非常艰难和痛苦的方式实现了类似线程和栈的思想。ESDM最大的问题是其“将线性思路分解成大量的回调所固有的复杂性”,导致程序难以实现,扩展和维护。
传统EDSM程序架构:


