concurrency - D 中有等价的 goroutines 吗?

标签 concurrency go d coroutine

我喜欢 Go,尤其是 goroutines。它们简单而高效。经过一些挖掘后,它们似乎基本上是多路复用到内核线程池的光纤(如果我错了请纠正我)。

也就是说,D 中是否有任何标准库(或相对流行和受支持的第 3 方添加)?

我想要的主要是:

  • 轻量级 - 线程使用过多内存并占用过多 CPU
  • 简单 - 数据共享不太重要,但简单的消息传递很重要
  • 托管 - 如果它处于运行时级别会很好

这里的主要目标是使 Web 服务器尽可能高效地与 Node.js 和 Go 的速度相媲美。这意味着可能有许多事件连接(http、websockets、数据流)。

我喜欢提到的其他平台,但 D 更通用。如果不是太笨重,我会选择 D 而不是其他。

最佳答案

没有什么完全等价的,但是有两个模块可以提供足够相似的东西来满足您的需求:

  1. std.concurrency提供消息传递和保证隔离,除非 shared 限定符用于获得非常有限的显式共享内存。但是,您(还)没有将纤程多路复用到 goroutines 提供的线程上。现在,每次调用 spawn 都会启动一个新的操作系统线程。此外,要使不变性足够可用以充分发挥这种范式的潜力,还有一些工作要做。有关此范例的更多信息,请参阅 Andrei Alexandrescu's "The D Programming Language". 的免费章节

  2. 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/

相关文章:

android - 如何在 Android 中下载文件并显示进度?

arrays - 将 json 数组解码为 go struct(数组位于 JSON 字符串的中间

java - 为什么类转换在 run 方法中失败,即使检查了 instanceof、outside run

在 go 中解析 set-cookie header

file-io - 来自 [] 字节或文件的 io.WriteSeeker 和 io.ReadSeeker

d - HTTP 不是套接字网络请求 - D

tuples - D:如何创建元组数组?

types - 将 int 值赋给 char

java - 具有过期可能性的简单 Java 字符串缓存

concurrency - 当我想同时运行具有1000多个不同参数的相同算法时,Hadoop能做什么?