用于演示MapReduce功能的主要示例之一是Terasort基准测试.我无法理解MapReduce环境中使用的排序算法的基础知识.
对我来说,排序只涉及确定元素与所有其他元素的相对位置.因此排序涉及将"一切"与"一切"进行比较.你的平均排序算法(快速,泡沫......)只是以聪明的方式做到这一点.
在我看来,将数据集分成多个部分意味着您可以对单个部分进行排序,然后您仍然必须将这些部分集成到"完整"的完全排序数据集中.鉴于分布在数千个系统上的TB级数据集,我认为这是一项艰巨的任务.
那怎么回事呢?这个MapReduce排序算法如何工作?
谢谢你帮我理解.
简单地等待所有线程进程完成的方法是什么?例如,假设我有:
public class DoSomethingInAThread implements Runnable{
public static void main(String[] args) {
for (int n=0; n<1000; n++) {
Thread t = new Thread(new DoSomethingInAThread());
t.start();
}
// wait for all threads' run() methods to complete before continuing
}
public void run() {
// do something here
}
}
Run Code Online (Sandbox Code Playgroud)
我如何改变这一点,以便main()方法在注释处暂停,直到所有线程的run()方法都退出?谢谢!
我想并行化我的Python程序,以便它可以在运行它的机器上使用多个处理器.我的并行化非常简单,因为程序的所有并行"线程"都是独立的,并将它们的输出写入单独的文件.我不需要线程来交换信息,但是我必须知道线程何时完成,因为我的管道的某些步骤依赖于它们的输出.
可移植性很重要,因为我希望在Mac,Linux和Windows上运行任何Python版本.鉴于这些约束,哪个是最适合实现它的Python模块?我试图在线程,子进程和多处理之间做出决定,这些都似乎提供了相关的功能.
有什么想法吗?我想要最简单的便携式解决方案.
鉴于此代码:
var arrayStrings = new string[1000];
Parallel.ForEach<string>(arrayStrings, someString =>
{
DoSomething(someString);
});
Run Code Online (Sandbox Code Playgroud)
所有1000个线程几乎会同时产生吗?
我一直在尝试多线程和并行处理,我需要一个计数器来对处理速度进行一些基本的计数和统计分析.为了避免同时使用我的类的问题,我在我的类中的私有变量上使用了一个lock语句:
private object mutex = new object();
public void Count(int amount)
{
lock(mutex)
{
done += amount;
}
}
Run Code Online (Sandbox Code Playgroud)
但我想知道......锁定变量有多贵?对性能有负面影响?
如何打破parallel.for循环?
我有一个非常复杂的声明,如下所示:
Parallel.ForEach<ColorIndexHolder>(ColorIndex.AsEnumerable(),
new Action<ColorIndexHolder>((ColorIndexHolder Element) =>
{
if (Element.StartIndex <= I && Element.StartIndex + Element.Length >= I)
{
Found = true;
break;
}
}));
Run Code Online (Sandbox Code Playgroud)
使用并行类,我可以到目前为止优化这个过程.然而; 我无法弄清楚如何打破并行循环?该break;语句抛出以下语法错误:
没有封闭的环可以打破或继续
在我最近的工作中Gibbs sampling,我一直在充分利用RVar它,在我看来,它为随机数生成提供了一个近乎理想的界面.遗憾的是,由于无法在地图中使用monadic动作,我无法使用Repa.
虽然一般来说明显的monadic地图不能并行化,但在我看来,这RVar可能至少是monad的一个例子,其中效果可以安全地并行化(至少在原则上;我对内部工作原理并不十分熟悉RVar) .也就是说,我想写下面的内容,
drawClass :: Sample -> RVar Class
drawClass = ...
drawClasses :: Array U DIM1 Sample -> RVar (Array U DIM1 Class)
drawClasses samples = A.mapM drawClass samples
Run Code Online (Sandbox Code Playgroud)
这里A.mapM看起来是这样的,
mapM :: ParallelMonad m => (a -> m b) -> Array r sh a -> m (Array r sh b)
Run Code Online (Sandbox Code Playgroud)
虽然这显然是如何工作的,但关键取决于其实现RVar及其基础RandomSource,原则上人们会认为这将涉及为每个产生的线程绘制一个新的随机种子并照常进行.
直觉上,似乎同样的想法可能会推广到其他一些monad.
所以,我的问题是:是否可以构建一个ParallelMonadmonad 类,其效果可以安全地并行化(可能至少有人居住RVar)?
它看起来像什么?还有哪些monad可能会在这个课程中出现?还有其他人考虑过如何在维修中使用它的可能性吗?
最后,如果并行monadic动作的这个概念不能概括,那么有没有人看到任何好的方法来使这个工作在特定的情况下RVar(它将非常有用)?放弃 …
有没有办法创建一次运行多个方法的线程.如果任何方法失败,则应该杀死所有其他线程.
提前致谢
node.js的事件驱动编程模型使得协调程序流有点棘手.
简单的顺序执行变成了嵌套的回调,这很容易(虽然写下来有点复杂).
但并行执行怎么样?假设您有三个可以并行运行的任务A,B,C,当它们完成时,您希望将结果发送到任务D.
使用fork/join模型,这将是
我如何在node.js中编写它?有没有最佳做法或烹饪书?我是否每次都必须手动滚动解决方案,或者是否有一些带帮助程序的库?
javascript parallel-processing concurrency fork-join node.js
Scala的期货线程池有多大?
我的Scala应用程序创建了数百万future {}s,我想知道我是否可以通过配置线程池来优化它们.
谢谢.