Questions tagged «parallel-processing»

与并行处理形成鲜明对比的是,并行处理可确保启动/执行/完成以并行方式执行的所有线程级和/或指令级任务,并确保同时执行的代码路径完成。


6
如果可能,是否应该始终使用并行流?
使用Java 8和lambda,可以很容易地将集合作为流进行迭代,也很容易使用并行流。docs中的两个示例,第二个示例使用parallelStream: myShapesCollection.stream() .filter(e -> e.getColor() == Color.RED) .forEach(e -> System.out.println(e.getName())); myShapesCollection.parallelStream() // <-- This one uses parallel .filter(e -> e.getColor() == Color.RED) .forEach(e -> System.out.println(e.getName())); 只要我不关心顺序,使用并行会一直有益吗?有人会认为,更快地将工作划分到更多的内核上。 还有其他考虑事项吗?什么时候应该使用并行流,什么时候应该使用非并行流? (问这个问题引发了关于如何以及何时使用并行流的讨论,不是因为我认为始终使用并行流是一个好主意。)

14
Java 8并行流中的自定义线程池
是否可以为Java 8 并行流指定自定义线程池?我在任何地方都找不到。 假设我有一个服务器应用程序,并且想使用并行流。但是该应用程序很大且是多线程的,因此我想将其划分。我不希望一个模块中的某个模块中的任务运行缓慢,而另一个模块中的任务却运行缓慢。 如果不能为不同的模块使用不同的线程池,则意味着在大多数实际情况下,我不能安全地使用并行流。 请尝试以下示例。在单独的线程中执行一些CPU密集型任务。任务利用并行流。第一个任务已中断,因此每个步骤需要1秒钟(由线程睡眠模拟)。问题是其他线程被卡住并等待中断的任务完成。这是一个人为的示例,但是假设有一个servlet应用程序,有人向共享的fork联接池提交了一个长时间运行的任务。 public class ParallelTest { public static void main(String[] args) throws InterruptedException { ExecutorService es = Executors.newCachedThreadPool(); es.execute(() -> runTask(1000)); //incorrect task es.execute(() -> runTask(0)); es.execute(() -> runTask(0)); es.execute(() -> runTask(0)); es.execute(() -> runTask(0)); es.execute(() -> runTask(0)); es.shutdown(); es.awaitTermination(60, TimeUnit.SECONDS); } private static void runTask(int …

25
如何使用ExecutorService等待所有线程完成?
我需要一次执行一些任务4,如下所示: ExecutorService taskExecutor = Executors.newFixedThreadPool(4); while(...) { taskExecutor.execute(new MyTask()); } //...wait for completion somehow 完成所有步骤后如何通知我?现在,我想不出什么比设置一些全局任务计数器并在每个任务结束时减少它,然后无限循环监视此计数器为0更好的了。或获取期货的列表,并在无限循环中对所有期货进行isDone监视。什么是不涉及无限循环的更好的解决方案? 谢谢。

18
并行编程和并行编程有什么区别?
并行编程和并行编程有什么区别?我问谷歌,但没有找到任何可以帮助我理解这种差异的东西。你能给我两个例子吗? 现在,我找到了以下解释:http : //www.linux-mag.com/id/7411-但是“并发是程序的属性”与“并行执行是机器的属性”对我来说还不够-我还是不能说什么。

13
每个核心的最佳线程数
假设我有一个4核CPU,并且我想在最短的时间内运行某些进程。理想情况下,该过程是可并行化的,因此我可以在无限数量的线程上运行它的块,并且每个线程花费相同的时间。 由于我有4个核心,因此我不希望通过运行比核心更多的线程来提高速度,因为单个核心只能在给定的时刻运行单个线程。我对硬件了解不多,所以这只是一个猜测。 在比内核更多的线程上运行可并行化进程是否有好处?换句话说,如果我使用4000个线程而不是4个线程来运行它,那么该过程会更快,更慢还是在大约相同的时间内完成?

13
如何并行化一个简单的Python循环?
这可能是一个琐碎的问题,但是如何在python中并行化以下循环? # setup output lists output1 = list() output2 = list() output3 = list() for j in range(0, 10): # calc individual parameter value parameter = j * offset # call the calculation out1, out2, out3 = calc_stuff(parameter = parameter) # put results into correct output list output1.append(out1) output2.append(out2) output3.append(out3) …



2
异步编程和多线程有什么区别?
我认为它们基本上是同一回事–编写在处理器之间(在具有2个以上处理器的机器上)将任务分割的程序。然后,我正在阅读this,它说: 异步方法旨在作为非阻塞操作。在等待任务运行时,异步方法中的等待表达式不会阻塞当前线程。取而代之的是,表达式将方法的其余部分作为继续进行签名,并将控制权返回给异步方法的调用者。 async和await关键字不会导致创建其他线程。异步方法不需要多线程,因为异步方法不会在自己的线程上运行。该方法在当前同步上下文上运行,并且仅在该方法处于活动状态时才在线程上使用时间。您可以使用Task.Run将受CPU约束的工作移至后台线程,但是后台线程对仅等待结果可用的进程没有帮助。 我想知道是否有人可以帮我翻译成英文。似乎在异步性(是一个词?)和线程之间进行了区分,这意味着您可以拥有一个具有异步任务但没有多线程的程序。 现在,我了解了异步任务的想法,例如pg上的示例。乔恩·斯基特(Jon Skeet)的《C#深度》第 467页,第三版 async void DisplayWebsiteLength ( object sender, EventArgs e ) { label.Text = "Fetching ..."; using ( HttpClient client = new HttpClient() ) { Task<string> task = client.GetStringAsync("http://csharpindepth.com"); string text = await task; label.Text = text.Length.ToString(); } } 该async关键字的意思是“ 这个功能,无论何时它被调用时,不会在这是需要的一切它的完成被称为它的呼叫后,上下文调用。” 换句话说,将其写在某些任务的中间 int x = …

11
.Net 4.0中没有ConcurrentList <T>?
我很高兴看到System.Collections.Concurrent.Net 4.0中的新名称空间,这真是太好了!我见过ConcurrentDictionary,ConcurrentQueue,ConcurrentStack,ConcurrentBag和BlockingCollection。 似乎神秘失踪的一件事是ConcurrentList&lt;T&gt;。我是否必须自己写一个(或从网络上获取它:))? 我在这里错过明显的东西吗?


3
Parallel.ForEach()与foreach(IEnumerable <T> .AsParallel())
抱歉,我正在尝试使用Reflector在BCL中找到这两种方法,但找不到它们。这两个摘要有什么区别? A: IEnumerable&lt;string&gt; items = ... Parallel.ForEach(items, item =&gt; { ... }); B: IEnumerable&lt;string&gt; items = ... foreach (var item in items.AsParallel()) { ... } 相互使用会产生不同的后果吗?(假设我在两个示例的方括号中所做的任何操作都是线程安全的。)

6
如何在Python中进行并行编程?
对于C ++,我们可以使用OpenMP进行并行编程。但是,OpenMP不适用于Python。如果要并行处理python程序的某些部分,该怎么办? 该代码的结构可以认为是: solve1(A) solve2(B) 其中solve1和solve2是两个独立的功能。为了减少运行时间,如何并行而不是按顺序运行这种代码?希望可以有人帮帮我。首先十分感谢。代码是: def solve(Q, G, n): i = 0 tol = 10 ** -4 while i &lt; 1000: inneropt, partition, x = setinner(Q, G, n) outeropt = setouter(Q, G, n) if (outeropt - inneropt) / (1 + abs(outeropt) + abs(inneropt)) &lt; tol: break node1 = partition[0] …

6
线程和多处理模块之间有什么区别?
我正在学习如何在Python中使用threading和multiprocessing模块并行运行某些操作并加快代码速度。 我发现很难理解一个threading.Thread()对象与一个对象之间的区别(也许是因为我没有任何理论背景)multiprocessing.Process()。 另外,对我来说,如何实例化一个作业队列并使其只有4个(例如)并行运行,而另一个则等待资源释放后再执行,对我来说也不是很清楚。 我发现文档中的示例很清楚,但并不十分详尽。一旦尝试使事情复杂化,我就会收到很多奇怪的错误(例如无法腌制的方法,等等)。 那么,什么时候应该使用threadingand multiprocessing模块? 您能否将我链接到一些资源,以解释这两个模块的概念以及如何在复杂的任务中正确使用它们?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.