协程库libtask源码分析之架构篇
Posted 编程杂技
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了协程库libtask源码分析之架构篇相关的知识,希望对你有一定的参考价值。
前言:假设读者已经了解了协程的概念、实现协程的底层技术支持。本文会介绍基于底层基础,如何实现协程以及协程的应用。
libtask是google大佬Russ Cox(Go的核心开发者)所写。libtask非常有意思,为数不多的代码就可以让人了解和理解协程的具体应用,很值得学习,我感兴趣的点在于如何在服务器中使用协程,传统的服务器,基本都是多进程、多线程、池化、单线程/多线程多路复用等等,而libtask使用少量的代码就让我看到了如何使用协程写一个服务器,非常赞(源码分析https://github.com/theanarkh/read-libtask-code)。
我们从libtask的main函数开始,这个main函数就是我们在c语言中使用的c函数,libtask本身实现了main这个函数,用户使用libtask时,要实现的是taskmain函数。taskmain和main的函数声明是一样的。下面我们看一下main函数。
int main ( int argc , char * * argv ) {
struct sigaction sa , osa ;
// 注册SIGQUIT信号处理函数
memset ( & sa , 0 , sizeof sa ) ;
sa . sa_handler = taskinfo ;
sa . sa_flags = SA_RESTART ;
sigaction ( SIGQUIT , & sa , & osa ) ;
// 保存命令行参数
argv0 = argv [ 0 ] ;
taskargc = argc ;
taskargv = argv ;
if ( mainstacksize == 0 )
mainstacksize = 256 * 1024 ;
// 创建第一个协程
taskcreate ( taskmainstart , nil , mainstacksize ) ;
// 开始调度
taskscheduler ( ) ;
fprint ( 2 , "taskscheduler returned in main!\n" ) ;
abort ( ) ;
return 0;
}
以上是关于协程库libtask源码分析之架构篇的主要内容,如果未能解决你的问题,请参考以下文章