libgo的简介

libgo

背景

今天谈谈比较热门的协程框架libgo, 其实和腾讯微信后台的协程库libco相比,libgo的性能大大超过libco,下图是从协程的各个角度相比。
在这里插入图片描述

源码

libgo源码

https://github.com/yyzybb537/libgo
或
https://gitee.com/yyzybb537/libgo

llibgo的目录结构说明:

w@w:~/wz/libgo/libgo$ ls -l 
total 52
drwx------ 2 w w 4096 424 21:06 cls
drwx------ 2 w w 4096 510 22:13 common
drwx------ 3 w w 4096 424 21:06 context
-rwx------ 1 w w 1918 424 21:03 coroutine.h
drwx------ 2 w w 4096 424 21:06 debug
drwx------ 2 w w 4096 424 21:06 defer
-rwx------ 1 w w   38 424 21:03 libgo.h
drwx------ 5 w w 4096 424 21:06 netio
drwx------ 2 w w 4096 424 21:06 pool
drwx------ 2 w w 4096 424 21:06 scheduler
drwx------ 2 w w 4096 424 21:06 sync
drwx------ 2 w w 4096 424 21:06 task
drwx------ 2 w w 4096 424 21:06 timer

libgo 做的较好的一点是增加了对windows 环境的支持等,我们只针对 Linux 环境做研究。

TODO:libgo 后续会逐步完善或增加的功能;
libgo:源码实现的主目录,关于协程和调度策略的实现都在该目录下;
test:测试代码;
tutorial:libgo 使用教程代码;
vs_proj:VS 环境下如何使用libgo。

在libgo目录下

task:协程的相关实现;
scheduler:协程调度的实现;
debug:libgo 自带的调试功能(用于协程状态的定位等);
coroutine.h:对一些常用对方法进行了重定义。
netio:hook的系统调用;
context:上下文的切换;
pool:libgo 实现的连接池

除此之外,libgo对linux的系统调用导致的阻塞都重新进行封装,Linux系统上Hook的系统调用列表:

	connect   
	read      
	readv     
	recv      
	recvfrom  
	recvmsg   
	write     
	writev    
	send      
	sendto    
	sendmsg   
	poll      
	select    
	accept    
	sleep     
	usleep    
	nanosleep
	gethostbyname                                                               
	gethostbyname2                                                              
	gethostbyname_r                                                             
	gethostbyname2_r                                                            
	gethostbyaddr                                                               
	gethostbyaddr_r

以上系统调用都是可能阻塞的系统调用, 在协程中使用均不再阻塞整个线程, 阻塞等待期间CPU可以切换到其他协程执行.

  close     
  fcntl     
  ioctl     
  getsockopt
  setsockopt
  dup       
  dup2      
  dup3  

以上系统调用不会造成阻塞, 虽然也被Hook, 但并不会完全改变其行为, 仅用于跟踪socket的选项和状态.

参考:
https://blog.51cto.com/muhuizz/2328117

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值