Concurrency D中是否有goroutines的等价物?

Concurrency D中是否有goroutines的等价物?,concurrency,go,d,coroutine,Concurrency,Go,D,Coroutine,我喜欢围棋,尤其是高尔夫。它们简单有效。经过一些挖掘,它们似乎基本上是多路复用到内核线程池中的(如果我错了,请纠正我) 也就是说,D中是否有任何标准库(或相对流行且受支持的第三方添加) 我想要的主要东西是: 轻量级-线程使用太多内存,占用太多CPU 简单-数据共享不太重要,但简单的消息传递很重要 托管-最好是在运行时级别 这里的主要目标是使web服务器尽可能高效地与Node.js和Go的速度相抗衡。这意味着可能有许多活动连接(http、WebSocket、数据流) 我喜欢上面提到的其他平台,

我喜欢围棋,尤其是高尔夫。它们简单有效。经过一些挖掘,它们似乎基本上是多路复用到内核线程池中的(如果我错了,请纠正我)

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

我想要的主要东西是:

  • 轻量级-线程使用太多内存,占用太多CPU
  • 简单-数据共享不太重要,但简单的消息传递很重要
  • 托管-最好是在运行时级别
这里的主要目标是使web服务器尽可能高效地与Node.js和Go的速度相抗衡。这意味着可能有许多活动连接(http、WebSocket、数据流)


我喜欢上面提到的其他平台,但D更一般化。如果不是太笨重,我会选择D而不是其他的。

std.parallel使用线程池来运行任务,但是您需要实现自己的消息传递例程(AFAIK库中目前没有可用的线程安全队列)

我不知道D库是否可以提供拆分堆栈支持(对线程/光纤)。不幸的是,若并没有它,很多成功的机会都会失去


如果使用goroutines可以轻松/更好地解决某些问题,那么为什么不首先使用Go呢?

没有确切的等效功能,但是有两个模块可以提供足够相似的功能满足您的需要:

  • 提供消息传递和保证隔离,除非使用
    共享
    限定符获得非常有限的显式共享内存。但是,您还没有(尚未)将光纤多路复用到goroutines提供的线程上。现在,每次调用
    spawn
    都会启动一个新的操作系统线程。此外,要使不变性足够可用,使这个范例充分发挥其潜力,还有一些工作要做。有关此范例的更多信息,请参阅

  • 提供任务。它面向并行,而不是并发。因此,任务不是传递消息,而是在不与调用线程通信的情况下执行,然后将其返回值返回给调用线程。此外,如果任务多于线程,多余的任务将排队,而不是使用光纤进行多路复用

  • 编辑:我最初设计和编写了STD并行性,并且愿意考虑增强请求以满足您的需求,只要它们不将模块的范围扩展到一般情况下并发。如果std.parallelism几乎满足了您的需求,但还不够,请在此处或digitalmars.d新闻组上发布功能请求


    此外,即使我可能不是这样一个请求的实现者,也可以随意建议对std.concurrency的增强。

    最好是Linux或BSD.Huh。。。在任何情况下,您都可能对阅读Windows7x64(和Windows8)的新版本感兴趣,尽管我认为它不会太有用,因为您正在寻找BSD/Linux.Nice。不幸的是,看起来似乎没有可用的拆分堆栈支持。如果有可能获得与Go相同的结果(类似的性能),我只会在这两种情况下使用d。如果不是,我会使用Go。@ratchetfreak-Fiber类是否像std.parallelism中的任务一样在线程池中运行?否,它与调用
    call()
    it的线程在同一个线程中运行。它将上下文切换硬连接起来看起来很有趣。对于我的特定用例(web服务器),每个连接都可以添加到任务池中,任务池应该模拟goroutines?@tjameson如果任务和主线程之间不需要进一步通信,我认为std.parallelism应该可以工作。我需要编写一些代码,看看它是否真的适合。我假设安全和可信函数是完全线程安全的。@tjameson:是的,std.parallelism的安全和可信函数使用与std.concurrency相同的机制来提供隔离保证。