D 中的多线程与 for 循环

2024-05-02

我知道 Rust 可以使用轻量级线程运行循环。就像是:

use task::spawn;

fn main() {
  for 100.times {
    do spawn {
      io::println("Hello");
    }
  }

我怎样才能在D中做到这一点?


相关API文档:标准并行度 http://dlang.org/phobos/std_parallelism.html

以下是完成示例的几种方法:

并行 foreach,使用任务池parallel http://dlang.org/phobos/std_parallelism.html#.TaskPool.parallel:

foreach (i, val; taskPool.parallel(new int[50])) {
    writeln("Hello:", i);
}

常规 foreach,使用以下命令将任务添加到任务池中put http://dlang.org/phobos/std_parallelism.html#.TaskPool.put:

foreach (i; 0 .. 50) {
    auto t = task!writeln("Hello:", i);
    taskPool.put(t);
}

执行每个任务新线程 http://dlang.org/phobos/std_parallelism.html#.task而不是任务池:

foreach (i; 0 .. 50) {
    auto t = task!writeln("Hello:", i);
    t.executeInNewThread();
}

Rust 的运行时有一个内置的任务调度程序,但对于 D,这是作为一个库实现的。话虽这么说,第二个在功能方面最接近,最后一个在语法方面最接近(但它们是操作系统线程,而不是轻量级)。

在 D 中,轻量级线程由程序员显式控制。 ATaskPool类似于 Rust/Go 中的调度程序,但它为程序员提供了更细粒度的控制。这使得它稍微更冗长,但它也为您提供了并行版本map, reduce, foreach等等。这使得更容易有效地表示更复杂的算法。

运行每个示例应该会给出预期结果:乱序写入。

Note:

来自文档:

该池中的工作线程是守护线程,这意味着在终止主线程之前无需调用 TaskPool.stop 或 TaskPool.finish。

第二个示例不会等到所有工作人员完成,因此在测试中您可能不会得到任何结果(当 main 完成时,所有剩余任务都将被终止)。您可能需要通过拨打电话来阻止finish http://dlang.org/phobos/std_parallelism.html#.TaskPool.finish:

taskPool.finish(true);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

D 中的多线程与 for 循环 的相关文章

  • 使用 WF 的多线程应用程序的错误处理模式?

    我正在写一个又长又详细的问题 但只是放弃了它 转而选择一个更简单的问题 但我在这里找不到答案 应用程序简要说明 我有一个 WPF 应用程序 它生成多个线程 每个线程执行自己的 WF 处理线程和 WF 中的错误 允许用户从 GUI 端进行交互
  • 在 Three.js 中从 Web Worker 加载纹理

    当将大纹理图像应用到网格上一段明显的时间时 Three js 会锁定浏览器的主线程 让我们考虑以下示例 var texLoader new THREE TextureLoader texLoader load someLargeTextur
  • 如何使用 wait() 和 notification() 正确暂停线程

    我想要一个启动线程并提供暂停和继续该线程的方法的类 我的第一个方法是使用标志 只要该值为 true 它就会循环 sleep 方法 就像是 public class Bot private Thread t private boolean i
  • 信号处理程序有单独的堆栈吗?

    信号处理程序是否有单独的堆栈 就像每个线程都有单独的堆栈一样 这是在 Linux C 环境中 来自 Linux 手册页signal 7 http kernel org doc man pages online pages man7 sign
  • fprintf() 线程安全吗?

    我正在为野人就餐问题的某些变量编写一个 C 解决方案 现在 我创建线程 每个线程都将 FILE 获取到同一个调试文件 在线程内我正在使用 fprintf 进行一些打印 打印的语句不受任何类型的互斥锁等保护 我没有在调试文件中观察到任何交错行
  • 终结器线程的范围是什么 - 每个应用程序域或每个进程?

    根据我的所有阅读 应该有一个 GC 线程来调用所有终结器 现在的问题是这个 一个 线程的范围是什么 每个进程或每个应用程序域 因为域的整体目的是在一个进程空间中分离并创建 独立 的不同应用程序 I read here http dn cod
  • Python 2.7:支持一个端口上多个连接的流式 HTTP 服务器

    我正在寻找一个标准的Python 2 7包 提供一个同时执行的HTTP服务器流媒体同一端口号上的连接 嘿 各位版主 请停止将我的问题标记为想要以非流媒体方式提供服务的问题的重复项 例如 python 中的多线程 Web 服务器 https
  • 如何使用 Chrono 板条箱获取 Rust 中当前的工作日?

    我正在尝试使用 Chrono 板条箱获取 Rust 中当前的工作日 JavaScript 的等价物是这样的 new Date toLocaleDateString en US weekday long 我使用以下代码获取当前时间戳 let
  • 调用许多网络服务的最佳方式?

    我有 30 家子公司 每家都实施了他们的 Web 服务 使用不同的技术 我需要实现一个Web服务来聚合它们 例如 所有子公司的Web服务都有一个名为的Web方法GetUserPoint int nationalCode 我需要实现我的网络服
  • Erlang 如何睡觉(晚上?)

    我想在 Erlang 服务器上每隔几个小时运行一次小型清理过程 我知道计时器模块 我在教程中看到一个示例 使用链式计时器 睡眠命令来等待几天后发生的事件 我觉得这很奇怪 我知道 Erlang 进程与其他语言中的进程相比是独一无二的 但是进程
  • 使用单独的线程在java中读取和写入文件

    我创建了两个线程并修改了 run 函数 以便一个线程读取一行 另一个线程将同一行写入新文件 这种情况会发生直到整个文件被复制为止 我遇到的问题是 即使我使用变量来控制线程一一执行 但线程的执行仍然不均匀 即一个线程执行多次 然后控制权转移
  • rust-analyzer 未能发现 vscode 中的工作区

    我开始学习 Rust 语言 但有一个问题rust analyzervscode 扩展名 它不提供代码完成 如链接所示 https rust analyzer github io manual html magic completions h
  • java中使用多线程调用同一类的不同方法

    我有一个类 如下所示 具有三种方法 public class MyRunnable implements Runnable Override public void run what code need to write here to c
  • PyQt5:如何使QThread返回数据到主线程

    I am a PyQt 5 4 1 1初学者 我的Python是3 4 3 这是我尝试遵循的many https mayaposch wordpress com 2011 11 01 how to really truly use qthr
  • 如何在Spring-Boot中创建DefaultMessageListenerContainer?

    我是 Spring Boot 的新手 并尝试创建 DefaultMessageListenerContainer 以便我可以使用 weblogic workmanager 并以多线程方式运行多个消息侦听器 有人可以提供一些例子吗 到目前为止
  • D 动态数组初始化、stride和索引操作

    抱歉 这成为了有关数组的三重问题 我认为 动态 数组在 D 中确实很强大 但以下问题已经困扰我一段时间了 在 C 中 我可以轻松地分配具有指定值的数组 但在 D 中 我还没有找到这样做的方法 当然下面的内容是没有问题的 int a new
  • 在 Rust 中,太大的位移是否是未定义的行为?

    当您运行此代码时 allow exceeding bitshifts fn main const NUMBER u64 0b 10101010 fn print shift i u32 println b NUMBER gt gt i pr
  • 从 Rust 中的函数返回异步函数

    第 1 部分 返回异步函数的函数的签名应该是什么 pub async fn some async func arg str What should be sig here pub fn higher order func action st
  • 定期更新 SWT 会导致 GUI 冻结

    Problem 当 GUI 字段定期更新时 SWT 会冻结 我想要一个基于 SWT 的 GUI 其中文本字段的值会定期递增 最初我从单独的线程访问 textField 导致抛出异常 线程 Thread 0 org eclipse swt S
  • 线程睡眠和Windows服务

    我正在开发一个 Windows 服务 该服务存在一些问题Thread Sleep 所以我想我会尝试使用计时器 因为这个问题建议 在 Windows 服务中使用 Thread Sleep https stackoverflow com que

随机推荐

  • 当应用程序崩溃时,Android Studio ADB 会清除 logcat 文件!哦美伊

    刚刚升级了最新的Android Studio 现在 当应用程序崩溃时 日志文件 adb logcat 就会消失 它不仅停止记录整个日志似乎突然被删除了 对于调试来说不太酷 我需要设置日志缓存大小或其他什么吗 还注意到调试器需要很长时间来收集
  • DBI:在 eval 中引发错误

    这个问题参考了池上的评论 But if you re going to put an eval around every statement just use RaiseError gt 0 in this thread https sta
  • 在 Django 中延迟文件下载的正确方法

    我有一个基于类的视图 它触发用户编写和下载报告 通常在def get我刚刚编译的班级报告 添加response Content Disposition attachment filename somefilename pdf 并向用户返回响
  • 如何在Java程序中检索环境变量的修改值(外部修改的)?

    是否可以在 Java 程序中检索环境变量的修改值 我尝试使用System getenv 但新的值并没有体现在程序中 场景是这样的 该程序检索环境变量的值 当程序仍在运行时 该变量的值可以从外部更改 甚至可以是手动过程 例如在 Windows
  • 如何使用 MFC 禁用顶级菜单项并使其变灰

    我有一个对话框应用程序 我希望在对话框顶部有可单击的菜单项 这些项目不显示下拉菜单 但实际上运行关联的命令 我通过在对话框属性中设置 Popup False 并分配消息 ID 来做到这一点 但我的问题是 当项目可点击没有意义时 无法正确禁用
  • iOS 6 调试控制台不见了?

    当我进行故障排除时 我曾经使用移动 Safari 的 调试控制台 来打印 console log 消息 在 iOS 6 中 Safari 的高级设置中 Web 检查器 取代了 调试控制台 不幸的是 我的公司不允许我将我们正在测试的手机插入我
  • NetworkX节点属性图

    我使用 networkx 进行可视化 当我使用该功能时我看到 绘制网络x边缘标签 我可以检索边缘的标签 我想在节点上打印属性 而不是标签 几乎尝试一切 仍然卡住了 如果我每个节点有 5 个属性 我是否可以在每个节点上打印特定属性 例如 如果
  • C++ 中 -> 是什么意思? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的点 运算符和 gt 有什么区别 https stackoverflow com questions 1238613 what is the difference between the dot
  • 使用 Javascript 防止刷新“跳转”

    我注意到 如果您在一个页面上并且向下滚动了很多 如果您刷新页面 大多数浏览器会将您跳回到您的位置 有什么办法可以防止这种情况发生吗 我研究了两个选项 但在 Webkit Firefox 上都不一致 window scrollTo 0 1 h
  • 了解 FacesContext 实例化详细信息

    莫贾拉 2 2 12 这是接管实例化的代码段面孔上下文 http grepcode com file repo1 maven org maven2 javax faces jsf api 2 1 javax faces webapp Fac
  • .NET 3.5 DirectoryServices.AccountManagement 中的不明确名称解析 (anr=*ma*) 等效项

    淘汰旧的 引进新的 呃 我正在搁置旧的 vb net asp net 2 0 asmx 服务 转而使用闪亮的新 c net asp net 4 0 WCF 服务 我的旧服务使用 System DirectoryServices Direct
  • 如何在 AWS Insights 上可视化由多个维度聚合的时间序列数据?

    我想使用 cloudwatch Insights 来可视化主机随时间变化的平均延迟的多线图 每个主机一根线 此统计查询提取延迟并按主机将其聚合在 10 分钟的存储桶中 但它不会生成任何可视化 stats avg latencyMS by b
  • 不要在异常堆栈中显示 Python raise-line

    当我在 Python 库中引发自己的异常时 异常堆栈将引发行本身显示为堆栈的最后一项 这显然不是一个错误 在概念上是正确的 但是当您在外部使用代码 例如作为模块 时 它会将重点放在对调试无用的东西上 有没有办法避免这种情况并强制 Pytho
  • 如何在 for 循环中跳过一些迭代

    在 python 中 我通常简单地循环遍历范围 for i in range 100 do something 但现在我想跳过循环中的几个步骤 更具体地说 我想要类似的东西continue 10 这样它就会跳过整个循环并将计数器增加 10
  • 如何将文本框绑定到日期时间字段但仅显示其日期部分(在 ASP.MVC 中)?

    我有一个视图 其中文本框绑定到日期时间模型字段 风景 Html TextBoxFor model gt model StartDate new class datepicker id startDate 该模型 Required Error
  • 如何将 XML 读入数据集

    我有一个类 它转到 URL 并使用 xmlDoc Load URL 获取 xml 文档 为了测试该类 我添加了一个 Web 项目以在网格视图中显示 xml 在单击按钮中 我创建了一个 xml 文档的实例并将其填充为 xmlDoc myCla
  • 为什么 Dash 在上传文件时会出现解析错误?

    上传 Excel 或 CSV 会导致错误 我遵循了 Dash 演示 但是当我尝试扩展它来执行绘图之类的操作时 它就不起作用了 我不想只显示一张桌子 Dash Table 函数已更新 因此之前使用 Dash Table Experiments
  • Python中的键盘可中断阻塞队列

    It seems import Queue Queue Queue get timeout 10 键盘可中断 ctrl c 而 import Queue Queue Queue get 不是 我总是可以创建一个循环 import Queue
  • 是否可以防止 DataGridView 中出现多行 HeaderText?

    当长度为HeaderText属性达到一定的字符限制并且文本中有空格 WinForms 会自动在标题中插入链接中断 我想要的是 Measurement Value 我得到什么 Measurement Value 有足够的空间来显示所有标题单元
  • D 中的多线程与 for 循环

    我知道 Rust 可以使用轻量级线程运行循环 就像是 use task spawn fn main for 100 times do spawn io println Hello 我怎样才能在D中做到这一点 相关API文档 标准并行度 ht