Han*_*etz 7 concurrency mapreduce
我目前正在设计一个应用程序,它有一个模块可以从数据库加载大量数据,并根据具体情况通过各种计算将其减少到更小的数据集.
许多更密集的操作具有确定性,并且可以用于并行处理.
如果我有一个循环遍历从db到达的大量数据块,并且每个都调用一个没有副作用的确定性函数,我将如何使它成为程序不等待函数返回而是设置接下来的电话,他们可以并行处理?现在我可以用一种天真的方法来证明这个原则.
我已经阅读过谷歌的MapReduce论文了,虽然我可以在很多地方使用整体原理,但我现在不会针对大型集群,而不是1.0版本的单核多CPU或多CPU机器.所以目前,我不确定我是否可以实际使用该库,或者我必须自己推出一个简单的基本版本.
我处于设计过程的早期阶段,到目前为止,我的目标是C-something(用于速度关键位)和Python(用于生产力关键位)作为我的语言.如果有令人信服的理由,我可能会改变,但到目前为止,我对我的选择很满意.
请注意,我知道从数据库中检索下一个块可能需要更长的时间,而不是处理当前的块,整个过程将受I/O限制.但是,我现在假设它不是并且实际上在此时使用数据库集群或内存缓存或其他东西不是I/O绑定的.
小智 2
我可能在这里遗漏了一些东西,但这看起来使用 pthreads 相当简单。
设置一个包含 N 个线程的小型线程池,并用一个线程来控制所有线程。
主线程只是位于一个循环中,执行如下操作:
与此同时,工作线程会执行以下操作:
实现此方法的方法可以像两个互斥控制数组一样简单。一个包含已工作的线程(线程池),另一个指示每个相应的线程是空闲还是忙碌。
根据您的喜好调整 N...
归档时间: |
|
查看次数: |
805 次 |
最近记录: |