我想知道如何为 obj-c 创建一个CSP库,它的工作方式类似于Go的通道/goroutines,但使用惯用的 obj-c(并且样板文件比实际方式少)。
在其他具有本机 courutines 和/或生成器的语言中,可以轻松对其进行建模,但我不知道如何在 obj-c 中进行并发编程的几种方法(另外,这个想法是有“廉价”线程)。
关于我需要做什么的任何提示?
我会看一下State Threads 库,因为它实现了与 Go 的 goroutine 切换算法基本相同的想法:当 goroutine 在系统调用中即将休眠时,它会将控制权交给调度程序,因此 ST 库包装了操作系统级别的文件描述符提供他们自己的类似 FD 的对象,这些对象可以被读取(和/或写入),但不是阻塞整个进程,这些操作将控制转移到库管理的其他轻量级线程。
然后你可能需要一个比 ST 库更高级的调度程序来保持操作系统线程忙于运行你的 SP。此处是对 Go 1.2 调度程序的简单介绍,其中包含指向更核心设计文档的链接。其余的在 Go 的源代码中。
另请参阅SO 上的这个答案。
创建操作,例如考虑这个过程:
x
从 获取数字east
,将其转换为字符串,然后将其提供给west
。我可以用一个保持内部状态x
(由数字和字符串组成)和以下操作的对象对其进行建模:
east-output
east
, 由流程逻辑在别处定义的操作x-input
, 操作取决于east-output
. 它将 number 从east-output
's 数据结构复制到x
's 数据结构中x-output
, 操作取决于x-input
. 它的内容被定义为纯粹的内部转换——在我们的例子中,stringWithFormat...
west-input
, 依赖于 的操作x-output
等然后您将操作转储到NSOperationQueue
其中并查看会发生什么(它是否有效,或者是否存在相互矛盾的依赖关系......)