协程学习笔记
2018-01-17 09:20
204 查看
**一 协程是什么?
二 协程有什么好处?主要用来解决什么问题?
三 协程的原理和实现
四 协程的主要开源库有哪些**
为什么觉得协程是趋势?
https://www.zhihu.com/question/32218874
早在上世纪70年代,Donald Knuth提出coroutines不过是一种特殊的subroutines(过程调用),在一些高级语言中称为函数。
协程是用户模式下的轻量级线程,协程的调度完全由应用程序来控制,操作系统不参与协程的调度。
,通俗易懂,协程可以认为是用户态的线程,在它看来thread就是CPU。
在一个thread内可以启动任意多个协程,它们放佛是在同一个“CPU”上运行的多个线程,而与线程的最大不同是,它并非”抢占式“的,因此它让出“CPU”的唯一方式是自己主动放弃执行,保存现场后跳转到其他协程执行。
1、协程有助于写出更浅显易懂可读的代码
但是使用回调函数模式,会把一个完整的流程拆分成多个子流程来执行,而正常人的思维更喜欢将一件事以顺序、同步的方式来执行,协程恰恰能解决这个问题,使得程序员能够用“同步”的思维方式写出“异步”的代码。
2、协程解决阻塞IO问题
无论你状态机、callback设计得多么精妙,现实中阻塞事很难以避免的。
协程是解决阻塞IO问题的一个不错的解决方案。
协程在调用阻塞IO时,协程会注册阻塞IO对应的事件,当阻塞IO函数
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
二 协程有什么好处?主要用来解决什么问题?
三 协程的原理和实现
四 协程的主要开源库有哪些**
为什么觉得协程是趋势?
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
相关文章推荐
- 8.lua学习笔记:协程
- lua协程----ngx-lua线程学习笔记
- 学习python笔记 协程
- Python 学习笔记 - 协程
- lua学习笔记13:协程具体解释和举例
- Python学习笔记——协程
- python学习笔记-生成器,迭代器,协程定义
- Python学习总结笔记(7)-- 生成器与协程
- python学习笔记 ---线程、进程、协程、队列、python-memcache、python-redis
- php协程(Coroutine)学习笔记
- Python学习笔记-协程
- 流畅python学习笔记:第十六章:协程
- u3d学习笔记一:协程的使用
- 【python学习笔记】Python实现协程yield方法和gevent库
- 【Unity学习笔记】协程
- python学习笔记:多并发(线程、进程、协程)
- 【Lua学习笔记】Lua中协程的使用
- Unity3D 学习笔记6 ——协程
- Lua学习笔记(六):协程
- python学习笔记(八)协程、爬取网页