您的位置:首页 > 其它

协程学习笔记

2018-01-17 09:20 204 查看
**一 协程是什么?

二 协程有什么好处?主要用来解决什么问题?

三 协程的原理和实现

四 协程的主要开源库有哪些**

为什么觉得协程是趋势?

https://www.zhihu.com/question/32218874

一.协程概念介绍

协程的历史

早在上世纪70年代,Donald Knuth提出coroutines不过是一种特殊的subroutines(过程调用),在一些高级语言中称为函数

协程是用户模式下的轻量级线程,协程的调度完全由应用程序来控制,操作系统不参与协程的调度。

,通俗易懂,协程可以认为是用户态的线程,在它看来thread就是CPU。

在一个thread内可以启动任意多个协程,它们放佛是在同一个“CPU”上运行的多个线程,而与线程的最大不同是,它并非”抢占式“的,因此它让出“CPU”的唯一方式是自己主动放弃执行,保存现场后跳转到其他协程执行。

二 协程有什么好处?主要用来解决什么问题?

陈硕在Linux服务器多线程编程中说,使用EPOLL多路复用IO模型,然后注册可读,可写,建立连接时间,当触发相应事件后,回调注册的回调函数。

1、协程有助于写出更浅显易懂可读的代码

但是使用回调函数模式,会把一个完整的流程拆分成多个子流程来执行,而正常人的思维更喜欢将一件事以顺序、同步的方式来执行,协程恰恰能解决这个问题,使得程序员能够用“同步”的思维方式写出“异步”的代码。

2、协程解决阻塞IO问题

无论你状态机、callback设计得多么精妙,现实中阻塞事很难以避免的。

* 避免了Network IO Blocking,还有
* Disk IO Blocking,还有
* 数据库Blocking,还有
* 日志Blocking,还有
* 第三方库blocking,还有
* 愚蠢的人类blocking……


协程是解决阻塞IO问题的一个不错的解决方案。

协程在调用阻塞IO时,协程会注册阻塞IO对应的事件,当阻塞IO函数

三 协程的原理和实现

四 协程的主要开源库有哪些

腾讯开源的libco协程库

libco是微信后台大规模使用的c/c++协程库,2013年至今稳定运行在微信后台的数万台机器上。

libco通过仅有的几个函数接口 co_create/co_resume/co_yield 再配合 co_poll,可以支持同步或者异步的写法,如线程库一样轻松。同时库里面提供了socket族函数的hook,使得后台逻辑服务几乎不用修改逻辑代码就可以完成异步化改造。

https://github.com/Tencent/libco

libgo协程库

libgo是一个使用C++11编写的协作式调度的stackful协程库,

同时也是一个强大的并行编程库, 是专为Linux服务端程序开发设计的底层框架。

https://github.com/yyzybb537/libgo

备注:

线程和进程的创建和调度策略.

libco使用教程

线程和进程创建的最大数值.

感兴趣的小伙伴可以阅读参考文章

参考文章:

http://blog.csdn.net/wuhenyouyuyouyu/article/details/52709395

https://www.zhihu.com/question/21483863

STATE THREADS 回调终结者

https://coolshell.cn/articles/12012.html

腾讯开源的 libco 号称千万级协程支持

https://www.zhihu.com/question/52193579
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  协程 学习 原理 教程