问题标签 [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.

0 投票
6 回答
2427 浏览

unit-testing - 对并发 Erlang 代码进行单元测试的最佳方法是什么?

我花了一些时间在 Erlang 上,我想将 TDD 应用于我正在编写的代码。

虽然标准库中的EUnit提供了一个很好的传统单元测试框架来测试常规样式代码,但似乎没有任何东西可以专门帮助测试并发代码,这在 Erlang 中被大量使用。

请注意,我们在这里讨论的是 Erlang,它使用消息传递(而不是共享状态)在并发进程之间进行通信,因此在共享状态语言中对并发代码进行单元测试的技术可能不适用。

有人找到了在 Erlang 中测试并发代码的好方法吗?

0 投票
5 回答
2724 浏览

django - 如何在 Django 中进行文本完整历史记录?

我想拥有用户编辑的大型文本字段的完整历史记录,使用 Django 存储。

我看过的项目:

我有一个特殊的用例,它可能超出了这些项目提供的范围。此外,我对这些项目的文档记录、测试和更新情况持谨慎态度。无论如何,这是我面临的问题:

我有一个模型,就像这样:

这个文本字段可能很大 - 超过 40k - 我想要一个自动保存功能,每 30 秒左右保存一次字段。很明显,如果有很多每个 40k 的保存(如果压缩,可能仍然是 10k),这可能会使数据库变得非常大。我能想到的最佳解决方案是在最近保存的版本和新版本之间保持差异。

但是,我担心涉及并行更新的竞争条件。我想到了两种不同的比赛条件(第二个比第一个严重得多):

  1. HTTP 事务竞争条件:用户 A 和用户 B 请求文档 X0,并分别进行更改,产生 Xa 和 Xb。Xa 被保存,X0 和 Xa 之间的区别是“Xa-0”(“a less not”),Xa 现在作为正式版本存储在数据库中。如果 Xb 随后保存,它将覆盖 Xa,差异为 Xb-a(“b 减去 a”)。

    虽然不理想,但我并不过分担心这种行为。文档相互覆盖,用户 A 和 B 可能不知道彼此(每个都从文档 X0 开始),但历史记录保持完整性。

  2. 数据库读取/更新竞争条件:有问题的竞争条件是 Xa 和 Xb 同时保存超过 X0。将有(伪)代码,例如:

    如果 Xa 和 Xb 都从数据库中读取 X0(即 orig_doc 是 X0),它们的差异将变为 Xa-0 和 Xb-0(相对于序列化的 Xa-0 然后 Xb-a,或者等效地 Xb-0 然后 Xa-乙)。当您尝试将差异修补在一起以生成历史记录时,它会在补丁 Xa-0 或 Xb-0(两者都适用于 X0)上失败。历史的完整性已经受到损害(或者已经受到损害?)。

    一种可能的解决方案是自动协调算法,它可以事后检测这些问题。如果重建历史失败,人们可能会假设发生了竞争条件,因此将失败的补丁应用于历史的先前版本,直到它成功。

我很高兴收到一些关于如何解决这个问题的反馈和建议。

顺便说一句,就它是一种有用的出路而言,我注意到这里讨论了 Django 原子性:

非常感谢你。

0 投票
1 回答
98 浏览

visual-studio-2008 - 使用 /m:x (x > 1) 在 Logger for MSBuild2008 中为项目分配错误

我们使用 MSBuild2005 和自写的 Logger 类进行构建,该类跟踪当前正在构建的项目并将传入的错误/警告分配给项目。这有点棘手,因为 MSBuild 在“以某种方式”访问引用的项目时也会调用 ProjectStarted/FinishedEventArgs。但我得到了它的工作。

现在我们要切换到 MSBuild2008。一切正常,直到我们打开并行构建(/m:2 或更高版本;这是我等待的功能!)。我的理解是,我可以通过查看 BuildEventMessages 中的 ThreadId 属性来跟踪并行任务。但是,一旦您启用并行构建,这将无法按预期工作。我遇到了一个项目是在 ThreadId 1 上构建的,而另一个项目是在 ThreadId 5 上启动的。但之后第三个程序从 ThreadId 5 开始!奇怪的是,这些项目表现得“像堆栈一样”:第二个在第一个之前完成。所以我想:可能没问题,但是我该如何分配错误。检查我是否在一个项目中插入了错误的代码。结果是:错误消息有一个全新的 ThreadId(不是 1 或 5,而是 6)!

所以我的问题是:如何将错误/警告消息分配给项目?

0 投票
12 回答
21853 浏览

python - 来自 Linux 上的命令队列的并行处理(bash、python、ruby ......随便)

我有一个包含 200 个命令的列表/队列,我需要在 Linux 服务器上的 shell 中运行这些命令。

我只想一次最多运行 10 个进程(从队列中)。有些过程需要几秒钟才能完成,而其他过程则需要更长的时间。

当一个进程完成时,我希望下一个命令从队列中“弹出”并执行。

有没有人有代码来解决这个问题?

进一步阐述:

在某种队列中,有 200 件工作需要完成。我希望一次最多进行 10 件工作。当一个线程完成一项工作时,它应该向队列询问下一项工作。如果队列中没有更多的工作,线程应该死掉。当所有线程都死掉时,这意味着所有工作都已完成。

我试图解决的实际问题是使用imapsync将 200 个邮箱从旧邮件服务器同步到新邮件服务器。有些用户的邮箱很大,需要很长时间才能同步,有些用户的邮箱很小,同步速度很快。

0 投票
2 回答
1672 浏览

windows - 用于直接 I/O 的 Windows 内核驱动程序 - 有人去过吗?

我需要以一种更好的方式处理对并行端口的直接 I/O,我们目前正在这样做 - 目前我们使用内核驱动程序,它使用 I/O 保护映射“打开”可用地址。这工作正常,但越来越落后。我们仍然希望继续使用并行端口,并且有非常令人满意的 CardBus ExpressCard 等并行端口卡供应商。我想创建一个驱动程序,该驱动程序知道总线枚举器分配给设备的地址并允许我写入这个地址来自我的(Delphi)应用程序。由于这个主题的明显复杂性,我正在努力从哪里开始。请问有人去过这条路吗?

0 投票
11 回答
1136 浏览

.net - 有没有办法多次执行一个方法,但管理连接/线程?(。网)

  1. 我有一个使用连接的方法(例如下载页面的方法)。
  2. 我必须多次执行此方法(例如下载 1000 页)。
  3. 以同步和顺序方式执行此操作需要很长时间。
  4. 我的资源有限(最多 8 个线程和/或最多 50 个同时连接)
  5. 我想利用所有资源来加速它。
  6. 我知道并行化(PLINQ、Parallel Extensions等)可以解决问题,但我已经尝试过了,由于资源稀缺,这种方法失败了。
  7. 我不想在管理资源的同时重新发明并行此类任务的轮子,必须有人以前做过,并且必须为此提供了一个库/教程。

任何人都可以帮忙吗?

更新当您开始将异步调用与并行化混合以获得最佳性能时,事情会变得更加复杂。这是在几个下载器上实现的,例如 Firefox 下载器,它同时获得 2 个下载,当其中一个完成时,它会获得下一个文件,依此类推。也许实现起来似乎很简单,但是当我实现它时,我曾经并且仍然很难将其通用化(对 WebRequest 和 DbCommand 有用)并处理问题(即超时)

赏金猎人赏金将授予第一个链接可靠且免费的 ($$) .NET 库的人,该库提供了一种简单的 C# 方法来并行化异步任务,如 HttpWebRequests.BegingetResponse 和 SqlCommand.BeginExecuteNonQuery。并行化不能等待 N 个任务完成再启动下一个 N,而是必须在 N 个初始任务之一完成后立即启动一个新任务。该方法必须提供超时处理。

0 投票
2 回答
1141 浏览

ssis - 如果有多个任务可用,SSIS 如何决定下一个要执行的任务

例如,如果我添加四个(空白)脚本任务 A1、A2、B1 和 B2,其中 A2 有一个约束要在 A1 之后运行,B2 有一个约束要在 B1 之后运行,但是 A1 和 B1 都没有约束,那么什么顺序任务会运行吗?

当我尝试这个时,它似乎是 A1,然后是 B1,然后是 A2,然后是 B2。但为什么?这个问题出于好奇。


编辑添加:

我专门将并行度设置为 1 并添加了消息框,这样我就可以看到它所采用的顺序。它总是采用我上面提到的相同顺序,但很好奇它为什么选择这个顺序是否有任何逻辑。


它似乎首先完成所有一级(无约束)任务,然后继续执行受限任务。

0 投票
5 回答
1296 浏览

language-agnostic - Grand Central vs 并行扩展

有谁知道苹果(Snow Leopard)即将推出的“Grand Central”技术的任何好的网站,以及它与来自微软的并行扩展(和本机并行计算的东西)相比如何?

0 投票
16 回答
4065 浏览

parallel-processing - 为什么摩尔定律需要并行计算?

这是我的一本 CS 教科书中的一个问题。我很茫然。我不明白为什么它必然会导致并行计算。有人想指出我正确的方向吗?

0 投票
2 回答
392 浏览

parallel-processing - 计算公式结果的最佳方法?

我目前有一个可以包含 100 个用户定义公式的应用程序。目前,我使用反向波兰符号来执行计算(将值和变量推入堆栈,然后将它们从堆栈中弹出并进行评估)。开始并行化此过程的最佳方法是什么?我应该看功能语言吗?

计算是在数字数组上执行的,例如,简单的 A+B 实际上可能意味着 100 次加法。我目前正在使用 Delphi,但这不是未来的要求。我将使用最适合这项工作的工具。公式也可能相互依赖,例如,我们可能有一个公式 C=A+B 和第二个公式 D=C+A。