Structured Concurrency for C

举报
实力程序员 发表于 2021/07/13 09:23:54 2021/07/13
【摘要】 今天给大家介绍一个开源组件libdill,用C编写,实现了Structured Concurrency。什么是 Concurrency?什么又是 Structured Concurrency呢?Concurrency,翻译为“并发”。最直接的技术解释,就是一个线程处理任务1一会儿,然后处理任务2,过一会儿又切换回来处理任务1,这样在多个任务之间不断切换。从这些任务来看,每个任务都是在不断执行...

今天给大家介绍一个开源组件libdill,用C编写,实现了Structured Concurrency。

什么是 Concurrency?什么又是 Structured Concurrency呢?

Concurrency,翻译为“并发”。最直接的技术解释,就是一个线程处理任务1一会儿,然后处理任务2,过一会儿又切换回来处理任务1,这样在多个任务之间不断切换。从这些任务来看,每个任务都是在不断执行和处理的。这就叫并发。

有一个和并发非常容易混淆的术语,叫并行(Parallelism)。并行是指多个线程,每个线程执行一个子任务,这样整个任务看起来,每个子任务都是同时在向前推进的。

那么,什么叫结构化并发(Structured Concurrency)呢?
并发执行的任务,有个专用的术语,叫Coroutine(协程)。当一个Coroutine创建了一个或多个子Coroutine时,当父Coroutine执行完毕后,需要保证其所有的子Coroutine都结束,有这样的生命周期管理保证,就叫做Structured Concurrency。没有这样的保证,就不叫Structured Concurrency。

下面这个图,就不是Structured Concurrency:

20210713_1.jpeg


下面这个图,是Structured Concurrency:

20210713_2.jpeg


由于子Coroutine还可以创建孙Coroutine,形成复杂的多层次关系,因此,一个线程调度Coroutine过程中,应用Structured Concurrency策略时,会把Coroutine按照父子关系,形成一个树形结构来管理:

20210713_3.jpeg

更详细的内容,请见 libdill 项目:
https://hub.fastgit.org/sustrik/libdill
http://libdill.org/structured-concurrency.html

另外还有一些使用libdill的开源项目:
https://hub.fastgit.org/jppunnett/libdill-tutorial
https://hub.fastgit.org/jppunnett/dboom
https://hub.fastgit.org/jeremycw/httpc

我的微信号是 实力程序员,欢迎大家关注我。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。