Perl 6 中有快速并行“for”循环吗?

2024-01-10

给定一些对 1 到 500000 之间的每个数字进行一些数学/转换的代码,我们有选择:

  1. 简单的for循环:for ^500000 -> $i { my $result = ($i ** 2).Str; }。在我的不科学基准测试中,这需要 2.8 秒。

  2. 最规范的并行版本在一个Promise,然后等待结果。await do for ^500000 -> $i { start { my $result = ($i ** 2).Str; } }需要 19 秒。这很慢!创建一个新的 Promise 必须有太多的开销,对于如此简单的计算来说是不值得的。

  3. 使用并联map操作速度相当快。在 2.0 秒时,该操作似乎慢到足以利用并行化:(^500000).race.map: -> $i { my $result = ($i ** 2).Str; }

第三种选择似乎是最好的。不幸的是,它读起来就像一个黑客。我们不应该写map在接收器上下文中迭代的代码,因为在源中读取“map”的其他人可能会假设目的是构建一个列表,这根本不是我们的意图。使用起来沟通很差map这边走。

有没有任何规范的快速方法来使用 Perl 6 的内置并发性?如果超级运算符可以接受块而不是仅接受函数,那么它就是完美的:

(^500000)».(-> $i { my $result = ($i ** 2).Str; }) # No such method 'CALL-ME' for invocant of type 'Int'

如果您想将 for 与 hyper 或 race 操作一起使用,则必须拼写它hyper for @blah.hyper(:batch(10_000)) or race for @blah.race(:batch(10_000))。或者不带参数:hyper for @blah, race for @blah.

决定这样做是因为您可能有类似的代码for some-operation() { some-non-threadsafe-code } where some-operation是图书馆或其他东西的一部分。现在您无法再判断 for 循环中是否可以包含线程不安全代码,即使您知道该库不会返回HyperSeq那时,如果库作者想出这个怎么办?好想法使some-operation通过超级化来更快?

这就是为什么“并行运行这个 for 循环是安全的”的指示符需要在代码所在的位置,而不仅仅是创建序列的位置。

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

Perl 6 中有快速并行“for”循环吗? 的相关文章

  • 停放正在使用的线程

    我正在尝试线程停放并决定构建某种服务 它是这样的 public class TestService private static final Logger logger LoggerFactory getLogger TestService
  • 现代 x86 硬件不能将单个字节存储到内存中吗?

    说到 C 的并发内存模型 Stroustrup 的C 编程语言 第 4 版 第 1 节 41 2 1 说 就像大多数现代硬件一样 机器无法加载或存储小于单词的任何内容 然而 我的 x86 处理器已经有几年的历史了 它可以并且确实存储小于单词
  • 数据流并发的一个很好的激励示例是什么?

    我了解数据流编程的基础知识 并且在Clojure API http richhickey github com clojure contrib dataflow api html 乔纳斯 博纳的演讲 http www slideshare
  • 并发.futures问题:为什么只有1个worker?

    我正在尝试使用concurrent futures ProcessPoolExecutor并行化串行任务 串行任务涉及从数字范围中查找给定数字的出现次数 我的代码如下所示 在执行过程中 我从任务管理器 系统监视器 顶部注意到 尽管给定了 m
  • MongoDB - WiredTiger 快照与锁定

    我不完全理解这两个功能在 WiredTiger MongoDB 程序中如何相互关联 1 WiredTiger 快照 2 数据锁定 如果使用WiredTiger引擎的每个读操作在读时都提供了数据库级别的 快照 以便创建一致性 ACID中的C
  • 在Java中,如何在单线程程序中抛出ConcurrentModificationException? [复制]

    这个问题在这里已经有答案了 我正在读这篇文章 Java常见并发问题 https stackoverflow com questions 461896 what is the most frequent concurrency problem
  • Java - 线程“主”中的异常 java.util.ConcurrentModificationException

    有什么办法可以修改HashMap迭代特定键时的值 下面给出一个示例程序 public static void main String args HashMap
  • 完全替换 ASP.Net 的会话

    ASP Net 会话对于传统的 WebForms 应用程序来说似乎很完美 但它们所做的一些事情对于现代 AJAX 和 MVC 应用程序来说是一个严重的问题 具体来说 访问 ASP Net 提供程序只有 3 种方法 锁定读和写 默认 会话被锁
  • python 线程是如何工作的?

    我想知道 python 线程是并发运行还是并行运行 例如 如果我有两个任务并在两个线程中运行它们 它们是同时运行还是计划同时运行 我知道GIL并且线程仅使用一个 CPU 核心 这是一个复杂的问题 需要大量解释 我将坚持使用 CPython
  • 使用 Golang 通道处理 HTTP 请求

    我正在尝试构建一个简单的 Golang Appengine 应用程序 它使用通道来处理每个 http 请求 原因是我希望每个请求执行合理的大型内存计算 并且每个请求都以线程安全的方式执行 即来自并发请求的计算不会混合 这一点很重要 本质上
  • 使用 Nginx 或 Apache 来提供动态内容? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 无锁算法中的 ABA

    我明白了ABA http en wikipedia org wiki ABA problem问题 但我无法理解的是 他们说在语言中自动垃圾收集它可能不会展示 所以我的问题是 自动垃圾收集如何防止ABA问题的发生 在java中是否可能 如果可
  • 使用 SQL Server 作为具有多个客户端的数据库队列

    给定一个充当队列的表 如何最好地配置表 查询 以便多个客户端同时处理队列 例如 下表指示了工作人员必须处理的命令 当worker完成后 它会将处理后的值设置为true ID COMMAND PROCESSED 1 true 2 false
  • 插入并发问题-多线程环境

    我有一个问题 即使用完全相同的参数在完全相同的时间调用相同的存储过程 存储过程的目的是获取记录 如果存在 或创建并获取记录 如果不存在 问题是两个线程都在检查记录是否存在并报告错误 然后都插入新记录 在数据库中创建重复记录 我尝试将操作保留
  • Java 8:并行 FOR 循环

    我听说 Java 8 提供了很多关于并发计算的实用程序 因此我想知道并行给定 for 循环的最简单方法是什么 public static void main String args Set
  • Java 中的无锁并发链表

    我想使用像中描述的链接列表this http reference kfupm edu sa content l o lock free linked lists using compare and 3368 pdf纸 但是 我在网上没有找到
  • 如何使信号量超时

    Go 中的信号量是通过通道来实现的 一个例子是这样的 https sites google com site gopatterns concurrency semaphores https sites google com site gop
  • 使用连接池后如何处理过多的并发连接?

    Scenario 假设您有一个拥有大量流量的网站或应用程序 即使使用数据库连接池 性能也会受到真正的打击 站点 应用程序甚至可能崩溃 因为并发连接太多 Question 人们有什么选择来处理这个问题 我的想法 我在想有这个问题的人可以创建多
  • Meteor.setTimeout 和 Meteor.methods 之间的并发

    在我的 Meteor 应用程序中实现回合制多人游戏服务器 客户端通过发布 订阅接收游戏状态 并且可以调用 Meteor 方法sendTurn将回合数据发送到服务器 他们无法直接更新游戏状态集合 var endRound function g
  • Java的-XX:+UseMembar参数是什么

    我在各种地方 论坛等 看到这个参数 并且常见的答案是它有助于高并发服务器 尽管如此 我还是找不到 sun 的官方文档来解释它的作用 另外 它是Java 6中添加的还是Java 5中存在的 顺便说一句 许多热点虚拟机参数的好地方是这一页 ht

随机推荐

  • NSPredicate 使用正则表达式检查字母数字

    我想在 Objective c 中使用正则表达式检查字符串 我的代码 NSString regexAmazonOrder a zA Z0 9 NSPredicate predicateAmazonOrder NSPredicate pred
  • UIButton 标题中的断线

    下面的按钮中显示的是地址 我的问题是地址非常长 如何在按钮标题中的两个变量之间获取断线 NSString sitz map kordinate herkunft NSString strasse map kordinate strasse
  • IIFE void function() 与 (function()) 中使用 void 与用括号括起来的区别

    创建模块的常见做法是将它们包装在括号中 这样就不会泄漏模块外部的任何变量 当连接等时 还有void运算符 计算给定表达式并返回undefined 参见MDN https developer mozilla org en US docs We
  • git-filter-repo 不读取我的邮件映射文件

    继续我之前的问题 https stackoverflow com questions 66614236 push to github mistakenly done by another github account 66614340 no
  • 在浏览器布局中为响应式图像保留空间(防止回流)

    我一直在进行更改以使我的网站更具响应性 总的来说 一切进展顺利 然而 我遇到了一个问题 之前 我总是在 img 元素上使用 height 和 width 属性 以便在布局中预留空间在浏览器加载图像时用于图像 这可以防止在浏览器加载和计算图像
  • 迭代链表

    我正在开发一个具有一些遗留代码的应用程序 这里有一个链表 代码在 while 循环中使用迭代器迭代该链表 LinkedList ll grammarSection getSectionsAsLinkList Iterator iter ll
  • 跟踪 z3::optimize unsat_core

    如何正确追踪z3 optimize未饱和核心 Z3 C z3 optimize当我添加时没有找到预期的解决方案不饱和核心跟踪 基于这些examples https github com Z3Prover z3 blob 9df6c10ad8
  • 如何使用原生库

    例如 我有一个 C 库 名为HelperLib 我有一些假设 我可以将这个项目编译成 so 文件 通过一些在线教程帮助我在 Android 上构建这个库 我可以在 C C 中使用这个库 通过图书馆网站上的官方教程 我对本机库有基本的了解 例
  • Struts 1 - 我的 Web 应用程序未找到 struts-taglib.jar

    我在用Struts 1 我开发了一个基于struts 的Web 应用程序 我在 JSP 页面中使用 struts 标签struts taglib jar通过在 JSP 文件中插入以下行 现在 当我在本地系统上运行该应用程序时 该应用程序工作
  • 发送到 Socket IO socket.id

    我正在尝试发送到特定的套接字 ID socket user playID emit correct data 但我得到 TypeError object is not a function 如果我退出user playID 我确实得到了一个
  • JavaScript 更改输入值时的事件?

  • .NET DLL 需要接收 Clarion 回调过程,然后将其全部传递给三个整数?

    我正在为 Clarion Clarion 是类似 C 的编程语言 程序编写 C NET DLL 我调用 C NET DLL 一切正常 一切正常 但是 我需要 C NET DLL 接收用于回调目的的 Clarion 过程 然后能够传递三个 i
  • 属性的命名约定[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 哪一个更好或更清楚 public int FrozenRegionWidth get set Or public int WidthOfFroz
  • 将多个 Pandas DataFrame 列设置为单列中的值或同时设置多个标量值

    我正在尝试将多个新列设置为一列 并分别将多个新列设置为多个标量值 也做不到 除了单独设置之外还有什么办法吗 df pd DataFrame columns A B data np arange 6 reshape 3 2 df loc C
  • 如何使用express-uploadfile从POST读取文本文件?

    我正在尝试制作 Node js 服务器 用于在那里上传文本文件 所以我使用 POST 来获取本地用户的文本文件 然后我想让服务器读取该文件 我想我可以让用户上传他的本地文本文件 我可以获取上传文件的描述 但很难让服务器读取文件的实际字符串
  • Chrome 的自动填充隐藏文本输入的背景图像

    成功禁用自动填充黄色背景颜色后 我偶然发现了另一个功能 我的每个输入元素都有一个背景图像 每次我关注文本输入时 浏览器都会在下拉列表中建议我之前使用的值 选择一个值后 自动填充会覆盖整个背景并隐藏图像 这是我的 html 和 css 在 J
  • NHibernate:System.Argument异常:已添加具有相同键的项目

    我遇到了一个很难重现的偶发错误 我的第一个猜测是 不知怎的 我有一个泄漏的休眠会话 但是当我运行休眠分析器 http nhprof com 我没有看到太多异常 MVC 2 0 流畅版本1 1 0 685 NHibernate 版本 2 1
  • 使用三元运算符初始化结构

    为什么三元运算符不能用于初始化结构类型 而可以用于初始化基类型 例如int 示例代码 include
  • javascript向所有函数添加原型方法?

    有没有一种方法可以在不使用原型库的情况下向所有 javascript 函数添加方法 类似于 Function prototype methodName function return dowhateverto this 这是我到目前为止所尝
  • Perl 6 中有快速并行“for”循环吗?

    给定一些对 1 到 500000 之间的每个数字进行一些数学 转换的代码 我们有选择 简单的for循环 for 500000 gt i my result i 2 Str 在我的不科学基准测试中 这需要 2 8 秒 最规范的并行版本在一个P