gpt4 book ai didi

concurrency - D 编程语言中的 Erlang 风格并发

转载 作者:行者123 更新时间:2023-12-03 08:29:38 26 4
gpt4 key购买 nike

我认为 Erlang 风格的并发是内核数量指数增长的答案。你可以用其他主流语言来伪造它。但解决方案总是让我想要。我不愿意放弃多范式编程(C++/D)来切换到 Erlang 的严酷语法。

什么是 Erlang 风格的并发:

来自语言作者之一( What is Erlang's concurrency model actually ? ):

  • 轻量级并发。
    创建线程便宜,维护疯狂数字便宜。
  • 异步通信。
    线程仅通过消息进行通信。
  • 错误处理。
  • 进程隔离。

  • 或者来自一位知情博主 ( What is Erlang-Style Concurrency?):
  • 快速进程创建/销毁
  • 能够支持 >> 10 000 个并发进程,但特性基本不变。
  • 快速异步消息传递。
  • 复制消息传递语义(无共享并发)。
  • 过程监控。
  • 选择性消息接收。

  • 我想 D's message passing可以完成大部分这些功能。我想知道的是“>>10,000 个并发进程(线程)”和“快速进程创建/销毁”。

    D 处理这些要求的能力如何?

    我认为要正确支持它们,您必须使用 green threads . D 的消息传递功能可以与绿色线程库一起使用吗?

    最佳答案

    默认情况下,存储在 D 中是线程本地的,因此线程之间不会共享任何内容,除非它特别标记为 shared .如果将变量标记为 shared ,然后可以使用传统的互斥锁和条件以及同步对象等来处理并发。然而,线程间通信的首选方式是使用 std.concurrency 中的消息传递设施,让所有数据保持线程本地,仅使用 shared当你必须。使用 std.concurrency 在线程之间传递的所有对象都必须按值传递或不可变,因此那里不会发生共享并且它是完全线程安全的。但是,目前获取不是数组的不可变引用类型可能有点痛苦(idup 通常可以轻松处理数组),因此传递值类型以外的任何内容或数组(尽管希望随着与 const 和 immutable 相关的编译器和标准库错误得到修复,并且更多的代码是 const 正确的,这种情况会很快得到改善)。

    现在,虽然在 D 中传递消息肯定会产生比您在 C++ 或 Java 等语言中得到的更干净、更安全的代码,但它构建在普通的 C 线程之上(例如 Linux 使用 pthreads),因此它没有Erlang 做的那种轻量级线程,因此处理多线程不会像 Erlang 那样高效。

    当然,我看不出有什么理由不能使用 D 编写更高效的线程系统,此时您可能可以获得类似于 Erlang 的线程效率,并且它大概可以使用类似的 API的 std.concurrency,但所有 D 的标准线程的东西都建立在普通的 C 线程之上,所以你必须自己做所有这些,这取决于你如何实现它以及取决于线程本地的准确程度/shared东西是由编译器和druntime处理的,可能很难让类型系统强制所有的东西都是线程本地的,你的“绿色”线程。恐怕我对确切的方法知之甚少shared已实现或“绿色”线程如何工作才能确定。

    无论如何,D 的消息传递系统肯定会导致处理线程比 C++ 甚至 Java 更令人愉快,但它的设计方式与 Erlang 不同。 D 是一种通用系统语言,而不是专门设计用于将线程用于所有事情并因此尽可能有效地使用它们的语言。 D 的大部分标准设施都建立在 C 之上,因此它的许多效率特性将类似于 C 的那些特性。

    关于concurrency - D 编程语言中的 Erlang 风格并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4011860/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com