协程优缺点
协程优缺点文章目录协程优缺点协程模型协程出现的原因协程优势注意协程模型现有的协程调度模型大多是N:M,意思就是每个线程下可以运行多个协程,而且线程也可以有多个。为了调度,又可以有有栈协程和无栈协程。在Linux下通常是利用ucontext_t实现,Boost也有一个context库可以作为实现基础(据说Boost的实现更快,本人未证实)。虽然一个线程下可以运行多个协程,但是同一线程下不能有协...
协程优缺点
协程模型
现有的协程调度模型大多是N:M,意思就是每个线程下可以运行多个协程,而且线程也可以有多个。为了调度,又可以有有栈协程和无栈协程。在Linux下通常是利用ucontext_t实现,Boost也有一个context库可以作为实现基础(据说Boost的实现更快,本人未证实)。虽然一个线程下可以运行多个协程,但是同一线程下不能有协程并发。
协程出现的原因
协程主要是为了提高并发,而且主要是IO并发。协程并不适合并行计算或者并行处理任务,因为同一时刻运行的协程数不可能大于操作系统线程,而且需要协程切换,不如线程池。对于IO密集任务,利用回调函数,配合协程,可以使逻辑更加简单清晰,不过协程可以做的,线程一样可以做,比如Reactor模型。
举一个网络通信的例子:
加入10个客户端接入,服务器线程数4。
如果用协程,那么可以直接开启10个协程,接受所有链接,把任务放到协程处理,不过运行时,还是要等到协程依次执行完毕,可以有四个协程同时执行,或者协程内部调度等等,好处是可以直接就接受全部链接;如果用线程,那么一次最多接受4个链接,但是四个链接可以同时处理(假设不使用select,poll或epoll)。
协程优势
- 可以一次接受多个连接,一直accept等待链接,有链接到来就开启一个协程完成任务
- 编写异步程序逻辑更清晰
注意
协程并不是一定就好,协程能完成的线程一样能完成,协程有它特定的使用场景以及优势。
更多推荐
所有评论(0)