3 回答
TA贡献1811条经验 获得超6个赞
没有什么完全等效的,但是有两个模块可以提供满足您需求的足够类似的东西:
std.concurrency提供消息传递和有保证的隔离,除非使用
shared
限定符获取非常有限的显式共享内存。但是,您(尚未)将光纤多路复用到goroutine提供的线程上。现在,每次调用都会spawn
启动一个新的OS线程。同样,还有一些工作要做,以使不变性足够可用,以使这种范例发挥其全部潜力。有关此范例的更多信息,请参见Andrei Alexandrescu的“ D编程语言”的免费章节。std.parallelism提供任务。它面向并行性,而不是并发性。 (即使您需要并发来实现并行性,这些也不是同一回事。) 因此,代替消息传递,任务只是执行而不与调用线程进行通信,然后将其返回值返回给调用线程。此外,如果任务多于线程,则多余的任务将排队,而不使用光纤进行多路复用。
编辑:我最初是设计和编写std.parallelism的,并且愿意考虑满足您这样的需求的增强请求,只要它们不会将模块的范围扩展到一般情况下并发。如果std.parallelism几乎可以满足您的需求,但不能满足您的要求,请在此处或在digitalmars.d新闻组上发布功能请求。
另外,即使我可能不是这样的请求的实现者,也可以建议对std.concurrency进行增强。
TA贡献1898条经验 获得超8个赞
我不知道D库是否可以为线程/光纤提供拆分堆栈支持。不幸的是,没有它,很多Go goroutines的实用性就丧失了。
如果使用goroutines可以轻松解决一些问题,那么为什么不首先使用Go呢?
- 3 回答
- 0 关注
- 232 浏览
添加回答
举报