为了账号安全,请及时绑定邮箱和手机立即绑定

D中是否有相当于goroutine的程序?

D中是否有相当于goroutine的程序?

Go
慕慕森 2021-04-28 09:46:40
我喜欢Go,尤其是goroutines。它们既简单又高效。经过一番挖掘之后,看来它们基本上是光纤多路复用到内核线程池中的(如果我错了,请纠正我)。话虽这么说,D中是否有任何标准库(或相对流行且受支持的第三方添加物)?我想要的主要内容是:轻量级线程使用过多的内存并占用过多的CPU简单的数据共享不是太重要,但是简单的消息传递很重要托管-在运行时级别上这样做很不错这里的主要目标是使Web服务器尽可能高效地与Node.js和Go的速度相媲美。这意味着可能有许多活动连接(http,websockets,数据流)。我喜欢提到的其他平台的东西,但是D的含义更为广泛。如果不太笨拙,我会选择D而不是其他。
查看完整描述

3 回答

?
杨魅力

TA贡献1811条经验 获得超6个赞

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

  1. std.concurrency提供消息传递和有保证的隔离,除非使用shared限定符获取非常有限的显式共享内存。但是,您(尚未)将光纤多路复用到goroutine提供的线程上。现在,每次调用都会spawn启动一个新的OS线程。同样,还有一些工作要做,以使不变性足够可用,以使这种范例发挥其全部潜力。有关此范例的更多信息,请参见Andrei Alexandrescu的“ D编程语言”的免费章节

  2. std.parallelism提供任务。它面向并行性,而不是并发性。 (即使您需要并发来实现并行性,这些也不是同一回事。) 因此,代替消息传递,任务只是执行而不与调用线程进行通信,然后将其返回值返回给调用线程。此外,如果任务多于线程,则多余的任务将排队,而不使用光纤进行多路复用。

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

另外,即使我可能不是这样的请求的实现者,也可以建议对std.concurrency进行增强。


查看完整回答
反对 回复 2021-05-10
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

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


查看完整回答
反对 回复 2021-05-10
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

我不知道D库是否可以为线程/光纤提供拆分堆栈支持。不幸的是,没有它,很多Go goroutines的实用性就丧失了。

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


查看完整回答
反对 回复 2021-05-10
  • 3 回答
  • 0 关注
  • 232 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信