![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
协程实现
晓彬_
这个作者很懒,什么都没留下…
展开
-
C语言实现协程(二)
基本思路上一篇已经提到如何使用ucontext组件来实现上下文切换。而我们要实现协程就需要实现一个调度器用来调度管理协程、协程恢复、协程切换等功能。用调度器来管理当前执行的协程,及并在调度器,并通过调度器管理所有协程的列表。协程协程需要执行目标函数的功能,并具备保存自身栈区、上下文和执行状态的功能。则协程结构体如下:enum Coroutine_State{DEAD, RE原创 2018-01-10 16:02:58 · 1097 阅读 · 2 评论 -
C语言实现协程(三)
回顾协程常用于IO密集型,但是目前我们仅仅是实现协程的切换与调度,并没有实战检验我们的协程库。接下来我们就用我们自己实现的协程库,实现一个非阻塞的socket服务器。实现思路我们已经实现了协程的切换恢复等功能。 现在我们要实现的是,当协程一个IO没有数据时我们不等待,而切换到下一个IO进行处理。 如果做一个比喻的话,大概就是像上学的时候老师一个一个听学生背课文。学生一个一个排好原创 2018-01-11 12:47:21 · 1606 阅读 · 0 评论 -
C语言实现协程(一)
引言在使用socket编程时,我们会用到accept、connect、recv、send等函数,这些函数在没有数据到达时,会阻塞等待IO数据的到达。这不利于我们处理多个连接并快速响应。一种方案是,服务端每accept一个连接,就创建一个新的线程用来处理这个连接。这会导致线程过多,而且线程之前切换开销很大。这就可以使用到协程了。当然不止socket这种可以使用协程,IO密集型都可以使用协程,无论原创 2018-01-09 14:49:10 · 10121 阅读 · 3 评论