标签归档:libtask

并发之libtask

【概述】
提到任务并发首先想到的肯定是传统的多进程,多线程模型,不过linux提供了函数库实现用户层的上下文切换 (sys/ucontext.h,ucontext.h)。libtask就是在单进程单线程下通过用户层的上下文切换来实现多任务并发的 库,libtask很小,轻量到只有几个文件。libtask与传统多进程或多线程并发模型相比的有两点优越性:

  • 用户层面的上下文切换只需要保存寄存器信息,开销很小
  • 没有资源竞争,不需要加锁

【主要结构】

【使用中的注意】

  • libtask核心文件是task.h,taskimpl.h,task.c,其他文件不是必须的
  • 根据业务修改维护任务指针的slot增长算法,原算法是每次用满时向上增加64个slot
  • libtask包含了main,自己只需要实现任务逻辑即可,任务逻辑入口taskmain(int argc, char *argv[])
  • 任务之间的通信,chann实现得有点繁琐,这些东西最好根据业务自身来定制

【libtask相关】
libtask源码
Mongrel2基于libtask实现