1.协程
协程,也称为轻量级线程,具备以下几个特点:
·能够在单一的系统线程中模拟多个任务的并发执行;
·在一个特定的时间,只有一个任务在运行,即并非真正地并行;
·被动的任务调度方式,即任务没有主动抢占时间片的说法。当一个任务正在执行时,外部没有办法中止它。要进行任务切换,只能通过由该任务自身调用yield()来主动出让CPU使用权;
·每个协程都有自己的堆栈和局部变量;
每个协程都包含3种运行状态:挂起、运行和停止。停止通常表示该协程已经执行完成(包括遇到问题后明确退出执行的情况),挂起则表示该协程尚未执行完成,但出让了时间片,以后有机会时会由调度器继续执行。
2.协程库(libtask)
libtask库的下载地址是:http://swtch.com/libtask/,这个库的作者使用的是非常开放的授权协议,因此可以随意修改和使用这些代码,但是必须保持该份代码所附带的版权声明。
这个libtask库实现了以下几个关键模块:
·任务及任务管理
·任务调度器
·异步IO
·channel
这个静态库直接提供了一个main()入口函数作为协程的驱动,因此库的使用者只需按该库约定的规则实现任务函数taskmain(),启动后这些任务自然会被以协程的方式创建和调度执行。taskmain()函数的声明如下: