问题标签 [parallel-processing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
multithreading - 如果有的话,Erlang 进程如何映射到内核线程?
Erlang 以能够支持许多轻量级进程而闻名。它可以这样做是因为这些不是传统意义上的进程,甚至不是 P 线程中的线程,而是完全在用户空间中的线程。
这很好(实际上很棒)。但是,Erlang 线程如何在多核/多处理器环境中并行执行呢?当然,它们必须以某种方式映射到内核线程才能在单独的内核上执行吗?
假设是这种情况,这是如何完成的?许多轻量级进程是否映射到单个内核线程?
或者有没有其他方法可以解决这个问题?
c# - 规划并行性
如果您计划编写一个计算量非常大的并行应用程序,您将使用哪些准则来设计您的对象(无论是类还是结构,或其他任何东西),以最大限度地发挥并行性的潜力。
我正在考虑一个应用程序,它解释/编译需要创建东西的树状对象图,将其传递给另一个要处理的对象,依此类推,具有树状结构。
从早期设计过程中应该考虑什么?
c# - 原子的或巨大的
如果您打算用 C# 编写一个非常并行的应用程序,那么构建非常小的东西会更好吗,比如
小班20个,大班40个,加起来60个,一共120个
或巨大的,例如:
单独制作这 60 个类(仍然考虑到可重用性)。
所以在#2 中,这 60 个类可以包含做事的方法,而不是其他类。
multithreading - 使用更多线程时,什么会使程序运行速度变慢?
这个问题是关于我之前问过的同一个程序。回顾一下,我有一个具有如下循环结构的程序:
bin_index
是其论点的完全确定性函数,就这个问题而言,它不使用或更改任何共享状态 - 换句话说,它显然是可重入的。
我第一次编写这个程序是为了使用单线程。然后我将它转换为使用多个线程,这样线程n
运行外部循环 where 的所有迭代i1 % nthreads == n
。所以在每个线程中运行的函数看起来像
并且所有的thread_local_histogram
s 都在最后添加到主线程中。
奇怪的是:当我只用 1 个线程运行程序以进行某些特定大小的计算时,大约需要 6 秒。当我用 2 或 3 个线程运行它时,进行完全相同的计算,大约需要 9 秒。这是为什么?我希望使用 2 个线程会比 1 个线程快,因为我有一个双核 CPU。该程序不使用任何互斥锁或其他同步原语,因此两个线程应该能够并行运行。
time
供参考:一个线程(这是在 Linux 上)的典型输出:
和两个线程:
代码位于http://static.ellipsix.net/ext-tmp/distintegral.ccs
PS我知道有专门为这种事情设计的库可能会有更好的性能,但这就是我的最后一个问题,所以我不需要再次听到这些建议。(另外我想使用 pthreads 作为学习经验。)
c++ - 如何减少程序的CPU使用率?
我编写了一个多线程程序,它通过大量浮点运算进行一些 CPU 繁重的计算。更具体地说,它是一个逐帧比较动画序列的程序。即,它将动画 A 中的帧数据与动画 B 中的所有帧进行比较,针对动画 A 中的所有帧。我对不同的动画并行执行这种密集操作,因此程序可以处理 AB 对、BC 对和 CA 对在平行下。该程序正在使用 QtConcurrent 和一个“映射”函数,该函数将一个带有运动的容器映射到一个函数上。QtConcurrent 为我管理线程池,我正在使用英特尔四核处理器,因此它产生 4 个线程。
现在,问题是我的进程破坏了我的 CPU。使用是 100% 不变的,如果我在足够大的动作集上运行我的程序(非分页区域中的页面错误),我实际上会出现蓝屏死机。我怀疑这是因为我的电脑超频了。但是,这可能是因为我编写程序的方式吗?我用来测试机器稳定性的一些非常密集的基准测试工具从未让我的电脑崩溃。有什么方法可以控制我的程序如何使用我的 CPU 来减少负载?还是我误解了我的问题?
multithreading - Windows 上的多核 Haskell
parallel-processing - 函数式语言本质上是否比它们的 OO 或命令式表亲更具可并行性?
我一直在阅读和思考这个问题。嗡嗡声似乎是在多核的未来,函数式语言将变得更加流行。我是函数式编程的相对菜鸟。我唯一的接触是学术性的,没有什么复杂到可以真正让这类语言通过它的步伐。
因此,据我了解,纯函数可以轻松透明地并行化。这是一个很棒的功能,因为它意味着编写线程代码没有任何麻烦。但是,它似乎对串行代码没有太大帮助。
像这样的串行调用似乎是一个常见的,有时是不可避免的问题。对我来说,这些是并行化如此困难的根源。有些任务只是(或似乎是)高度连续的。拥有“功能心态”是否可以让您更好地分解一些看似连续的任务?是否有任何现有的函数式语言提供透明的机制来更好地并行化高度串行的代码?最后,函数式语言本质上是否比 OO 或命令式语言更具可并行性,为什么?
c++ - unix-fork-monitor-child-progress
我有一个应用程序,其中一些并行处理会有所帮助。出于讨论的目的,假设有一个目录,其中包含 10 个文本文件,我想启动一个程序,该程序分叉 10 个进程,每个进程获取一个文件,并将文件内容大写。我承认父程序可以使用等待函数之一或使用select函数等待子程序完成。
我想做的是让父进程监视每个分叉进程的进度,并在进程运行时显示进度条之类的东西。
我的问题。
对于分叉的进程将这些信息传回给父进程,我有什么合理的替代方案?使用哪些 IPC 技术是合理的?
c# - lambda 表达式是多线程的吗?
lambda 表达式是多线程的吗?
说当你把一个数学公式写成一个lambda方法时,当你把它传递给另一个方法时,它会是多线程的吗?
delphi - D2010 Beta:支持多核的完美方式
在我之前关于新 D2010 的预期功能的问题中,评分最高的答案之一是“多核支持”。
好吧,众所周知,Delphi 自 D2 (IIRC) 以来就支持线程编程,并且在某些领域被大量使用。更具体地说,在您看来,哪一种是在 Delphi 中支持并行编程的完美方式?(但不仅如此——我们不要把这个问题完全与德尔福联系起来)。
就我个人而言,我倾向于看到一种组合方法会起作用,具体取决于情况:线程(无论如何我们都有)、actor 模型和基于任务的方法(实际上接近于 actor 模型)。
此外,恕我直言,研究一种视觉建模工具来描述演员之间的互动会非常有趣。
也非常欢迎使用可视化调试器(可能与上述工具相同)。
一些参考资料:
你的意见会是什么?