如何使用objective-c实现样式通道(CSP)?

时间:2013-09-08 16:06:39

标签: objective-c concurrency go yield channel

我想知道如何为obj-c创建一个CSP库,它的工作方式类似于Go的channel / goroutines,但是具有惯用的obj-c(并且比实际方法更少的样板)。

在使用原生courutines和/或生成器的其他语言中,可以轻松地对其进行建模,但我不知道如何在obj-c中进行并发编程的几种方法(另外,这个想法是有的)便宜的“线程”。

关于我需要做什么的暗示?

2 个答案:

答案 0 :(得分:1)

我会查看State Threads library,因为它实现了与Go的goroutine切换算法基本相同的想法:当goroutine即将在系统调用中睡觉时,goroutine放弃对调度程序的控制,因此ST库包装OS级文件描述符以提供它们自己的类似FD的对象,这些对象可以从(和/或写入)读取,但不是阻止整个过程,而是将这些操作转移控制转移到由库管理的其他轻量级线程。

然后,您可能需要一个比ST库更先进的调度程序,以保持OS线程忙于运行SP。 Go 1.2调度程序的简单介绍是here,它包含指向更加核心的设计文档的链接。剩下的就是Go的源代码。

另见this answer on SO

答案 1 :(得分:0)

创建操作,例如例如,考虑这个过程:

  • 流程xeast获取数字,将其转换为字符串,并将其提供给west

我可以使用保持内部状态x(由数字和字符串组成)的对象和以下操作对其进行建模:

  • east-output,由east流程逻辑
  • 在其他地方定义的操作
  • x-input,取决于east-output的操作。它将east-output的数据结构中的数字复制到x的数据结构
  • x-output,取决于x-input的操作。其内容被定义为纯粹的内部转换 - 在我们的示例中,stringWithFormat...
  • west-input,取决于x-output等的操作

然后你将操作转储到NSOperationQueue并查看会发生什么(它是否有效,或者是否存在矛盾的依赖...)