Structured Concurrency for C
今天给大家介绍一个开源组件 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:
下面这个图,是 Structured Concurrency:
由于子 Coroutine 还可以创建孙 Coroutine,形成复杂的多层次关系,因此,一个线程调度 Coroutine 过程中,应用 Structured Concurrency 策略时,会把 Coroutine 按照父子关系,形成一个树形结构来管理:
更详细的内容,请见 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
我的微信号是 实力程序员,欢迎大家关注我。
版权声明: 本文为 InfoQ 作者【实力程序员】的原创文章。
原文链接:【http://xie.infoq.cn/article/4078d958abec7cd535d726a1b】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论