2009-07-02 33 views
8

我们可以在单个CPU上互换使用“并行编码”和“多线程编码”吗?并行编码与多线程(在单个CPU上)

我在这两方面都没有多少经验, 但我想将我的编码风格转移到上述任何一种。

正如我现在发现的那样,许多单一的应用程序已经过时了,这对未来的软件行业来说会更好,因为它可以成为职业前景?

回答

0

我不确定你认为“并行编码”是什么,而是并行编码,据我所知,它是指产生由CPU并行执行的代码,因此多线程代码属于该描述。

这样,显然你可以交替使用它们(因为它们落入另一个内部)。

尽管如此,我建议你慢慢来,并从基础知识开始学习。了解为什么多线程变得越来越重要,进程,线程和光纤之间有什么区别,你如何同步它们等等。

请记住,您称之为并行编码是相当复杂的,特别是与序列编码相比,所以要做好准备。也不要匆忙进入。仅仅因为你使用3个线程而不是1个线程不会使你的程序更快,甚至可能会让它变慢。你需要了解这些问题和原因。并非所有的事情都可以平行进行,而不是可以做到的。

2

这个问题有点令人困惑,因为您可以在多个线程中执行并行操作,但所有多线程应用程序都不使用并行计算。 在并行代码中,通常会有许多“工作人员”使用一组数据异步返回结果。但多线程在更广泛的范围内使用,如GUI,阻止I/O和网络。

由于管理取决于您的操作系统如何处理线程和进程,因此处于单个或多个CPU上并没有多大改变。多线程在各处都会很有用,并行并不是日常的计算范例,因此它可能是职业前景中的“利基”。

2

我在.NET 4.0中看到的一些演示,并行代码更改似乎更容易,然后执行线程。 “For Loops”和其他一些支持并行处理的新语法。所以有区别。

我认为在未来,你会同时做到这两点,但我认为并行支持会更好,更容易。你仍然需要线程进行后台操作和其他事情。

+0

HTTP写的编译器或我的结构要么完成了://channel9.msdn。 com/posts/VisualStudio/Using-the-Parallel-Extensions-to-the-NET-Framework/ – eschneider 2009-07-02 08:22:40

1

事实是,您无法在单个CPU上实现“真正”的并行。有几个库(如C的MPI)在这方面有所帮助。但并列主义的概念并不是用于在流行的解决方案上工作的开发人员。

由于在单个CPU上引入了多个内核,因此多线程很常见,由于线程库和线程安全类型,方法,类等等,因此在每种语言中实现都很容易且几乎透明。这样你可以模拟并列。

无论如何,如果您从此开始,请先阅读有关并发和线程的主题。当然,线程+并行性可以在一起工作。

+0

除了可能在erlang中,多线程在任何语言中都不容易。 – 2009-07-02 08:41:41

12

多线程与并行编码/计算之间肯定存在重叠,目标处理架构的主要区别在于。

多线程已被用于一个进程中利用具有共享存储器在单个CPU上并发的好处。在具有多个CPU的机器上运行相同的程序可能会导致显着的加速,但通常是奖金而非预期(直到最近)。许多操作系统都有线程模型(例如pthreads),它们受益于但不需要多个CPU。

多重并行编程靶向多个CPU的标准模型中,从一个大的机器上许多CPU早期SMP机,然后到集群计算跨越许多机器,现在回到上的许多CPU /核单电脑。 MPI是一个可以跨多种不同架构工作的标准。

当然,我们可以使用带有语言框架的线程编程一个并行设计,如OpenMP。我听说过依赖于单独处理的多组件GUI /应用程序,理论上它可以在任何地方运行。实际上,前者比后者多。

可能最主要的区别是程序跨多台机器运行,使用多线程并不实际,而共享内存的现有应用程序将无法工作。

0

简单的语言 多线程可以在CPU本身和 并行编程是一个明确的任务由程序员“的#pragma”

相关问题