纯 Swift 并发

Pure Swift concurrency

我遇到的所有提供 Swift 并发功能的库要么依赖于 Objective-C 库,要么是基于 C GCD 的包装器。 (iOS 和 OS X)

我只是想知道是否有人知道纯 Swift 并发库?没有依赖性。或者,如果不能,我们如何着手制作一个?

Swift 语言还没有支持并发的构造。有传言说这些将被添加到该语言的未来版本中,但与此同时,我认为如果没有 OS 支持,您将无法做到这一点。

GCD 在 Swift 中提供了相当干净的并发解决方案,因为 GCD 块是 Swift 闭包。但是,它不是平台无关的。 (至少不在 Apple 生态系统之外。)

编辑:

我想你可以写一个并发库,它会 运行 通过使用 POSIX 在所有 POSIX 兼容的 OS 上,但是 Windows 并不是真正的 POSIX 兼容,因此这也可能不是一个完美的解决方案。

编辑#2:

在 Swift 3 中,GCD 界面已被清理并制作了更多“Swifty”。现在有一个 Dispatch class,它有 class 方法来完成过去使用全局函数的事情。

您可以像这样创建基于队列的调度的简单抽象:

protocol OperationQueue {
    var suspended: Bool { get set }
    var operationCount: Int { get }
    func addOperationWithBlock(block: () -> Void)
    func cancelAllOperations()
    func waitUntilAllOperationsAreFinished()
}

然后,在 OS X(或任何其他 Apple 平台)上,您可以直接使用 GCD:

extension NSOperationQueue: OperationQueue { }

在所有其他系统上,您可以创建自己的实现:

class POSIXOperationQueue: OperationQueue { /* implementation with pthread */ }
class Win32OperationQueue: OperationQueue { /* implementation with Win32 API */ }