5

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

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

关于我需要做什么的任何提示?

4

2 回答 2

1

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

然后你可能需要一个比 ST 库更高级的调度程序来保持操作系统线程忙于运行你的 SP。此处是对 Go 1.2 调度程序的简单介绍,其中包含指向更核心设计文档的链接。其余的在 Go 的源代码中。

另请参阅SO 上的这个答案

于 2013-09-08T19:11:25.037 回答
0

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

  • 过程x从 获取数字east,将其转换为字符串,然后将其提供给west

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

  • east-outputeast, 由流程逻辑在别处定义的操作
  • x-input, 操作取决于east-output. 它将 number 从east-output's 数据结构复制到x's 数据结构中
  • x-output, 操作取决于x-input. 它的内容被定义为纯粹的内部转换——在我们的例子中,stringWithFormat...
  • west-input, 依赖于 的操作x-output

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

于 2013-09-27T10:30:58.057 回答