多道运行所需时间?

井春井春最佳答案最佳答案

一个线程执行的时间并不一定就比另一个线程执行的时间长。 比如这个简单的加一,对于单核心来说,两个线程可能同时执行(假设没有内存阻塞),那么总的时间就是2*t;如果是一个核心,那么就是一个线程执行两次,需要2t。但是,如果有缓存的话,这两个操作并不会真的执行两次,而是一起执行,然后各自用各自的缓存,这样实际上还是并行的,总的时间依然是2t。 所以,这个问题其实是没问题的。

其次,C# 的 Parallel.ForEach 和 F#'s for all 并不是并行计算,因为它们不会创建并行的执行流! 从语义上来讲,for each 总是有序执行的。只不过在.net框架下,由于实现了并行化,所以看起来是并行的。其实这种代码本质上还是串行的——它只是将串行执行的部分放到后台去执行了而已,并没有真正创建并行的执行流。而只有当编译器发现可以创建并行的执行流时,才能真正的并行执行这些代码。

而Parallel.For()和Parallel.ForEach(block)才是并行的,虽然它们看起来像是循环。这两种方法是让计算机同时执行多个任务,而不是一个一个的执行序列。 最后,如果你真想要了解什么是并行编程以及如何实现真正的并行,建议看看《并行计算入门》。

我来回答
请发表正能量的言论,文明评论!