我喜欢 Go,尤其是 goroutines。它们简单而高效。经过一些挖掘后,它们似乎基本上是多路复用到内核线程池的光纤(如果我错了请纠正我)。
也就是说,D 中是否有任何标准库(或相对流行和受支持的第 3 方添加)?
我想要的主要是:
- 轻量级 - 线程使用过多内存并占用过多 CPU
- 简单 - 数据共享不太重要,但简单的消息传递很重要
- 托管 - 如果它处于运行时级别会很好
这里的主要目标是使 Web 服务器尽可能高效地与 Node.js 和 Go 的速度相媲美。这意味着可能有许多事件连接(http、websockets、数据流)。
我喜欢提到的其他平台,但 D 更通用。如果不是太笨重,我会选择 D 而不是其他。
最佳答案
没有什么完全等价的,但是有两个模块可以提供足够相似的东西来满足您的需求:
std.concurrency提供消息传递和保证隔离,除非
shared
限定符用于获得非常有限的显式共享内存。但是,您(还)没有将纤程多路复用到 goroutines 提供的线程上。现在,每次调用spawn
都会启动一个新的操作系统线程。此外,要使不变性足够可用以充分发挥这种范式的潜力,还有一些工作要做。有关此范例的更多信息,请参阅 Andrei Alexandrescu's "The D Programming Language". 的免费章节std.parallelism提供任务。它面向并行性,而不是并发性。 (These are not the same thing even though you need concurrency to implement parallelism.)因此,代替消息传递,任务只是在不与调用线程通信的情况下执行,然后将其返回值返回给调用线程。此外,如果任务多于线程,多余的任务将排队,而不是使用纤程进行多路复用。
编辑:我最初设计并编写了 std.parallelism,我愿意考虑增强请求以满足像您这样的需求,只要它们不会将模块的范围扩展到一般情况下的并发。如果 std.parallelism 几乎可以满足您的需求,但还不够,请在此处或 digitalmars.d 新闻组上发布功能请求。
此外,尽管我可能不是此类请求的实现者,但请随时提出对 std.concurrency 的增强建议。
关于concurrency - D 中有等价的 goroutines 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8412056/