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