Swift是否具有原生并发和多线程支持?

4
我正在编写一个Swift客户端,与嵌入式系统上用C语言编写的服务器进行通信。这与iOS/OSX无关,因为我使用的是最近发布的Ubuntu版本。
Swift是否具有并发的本地支持?我知道苹果不鼓励开发人员使用线程,并通过GCD将任务交给调度队列。问题在于,GCD似乎只适用于Darwin(而NSThread是Cocoa的一部分)。
例如,C++11和Java将线程和并发作为其标准库的一部分。我了解像Unix上的posix这样的平台特定内容可以在某种C封装器下使用,但对我来说,这真的破坏了首先使用Swift的目的(清晰、易于理解的代码等)。

尝试在Ubuntu上查看libdispatch。GCD是一个非常好的概念,易于使用。https://launchpad.net/ubuntu/+source/libdispatch - user3441734
GDC的官方端口(https://github.com/apple/swift-corelibs-libdispatch)在Ubuntu上尚未正常工作。这是Ubuntu团队的某个端口吗? - Warrshrike
1个回答

6

2021年到了...

从Swift 5.5开始,有更多的选项可用,如async/await编程模型和actors。

仍然没有直接操作线程,这是(截至今天)一种设计选择。

如果您以前编写过并发代码,则可能习惯于使用线程。Swift中的并发模型建立在线程之��,但您不直接与它们交互。Swift中的异步函数可以放弃它正在运行的线程,这样第一个函数被阻塞时,另一个异步函数就可以在该线程上运行。

原始2015年答案

引用自Swift的GitHub,有一个关于“演进”的自述文件:

并发性:Swift 3.0完全依赖于平台并发原语(libdispatch、Foundation、pthreads等)进行并发。对并发的语言支持是一个经常被请求且潜在价值很高的功能,��太大而不能包含在Swift 3.0的范围内。

我猜这意味着在可预见的未来,没有针对线程的语言级“原语”计划。

有道理。我想苹果积极构建 Linux 版本的 GDC 作为其开源计划的一部分,这可能是一些安慰。 - Warrshrike
当然。不过,看到Scala(以及Java和Python)如何处理类似于“Future”的结构(以及组合...等等),并且看到语言设计师借鉴这些语言的特性的品味,人们可以看到在扩展Swift方面的价值,超越了“只是”移植GCD。 - GPI
是的,绝对没错。将来自Ruby和Scala等语言的函数式编程构造包含到基于C的类型安全语言中,这是Swift吸引我的(以及其他人,毫无疑问)一个重要原因。 - Warrshrike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接