我们可以在单个cpu上交替使用“并行编码”和“多线程编码”吗?
我对两者都没有多少经验 但我想将我的编码风格转移到上述任何一种。
正如我现在发现的那样,很多单一的应用程序已经过时了,这对未来的软件产业来说会更好吗?
答案 0 :(得分:13)
多线程和并行编码/计算之间肯定存在重叠,主要区别在于目标处理架构。
多线程已被用于在具有共享内存的单个CPU上的单个进程中利用并发的优势。在具有多个CPU的计算机上运行相同的程序可能会导致显着的加速,但通常是奖励而不是预期(直到最近)。许多操作系统都有线程模型(例如pthreads),它们受益但不需要多个CPU。
多处理是针对多个CPU的并行编程的标准模型,从大型计算机上具有多个CPU的早期SMP计算机,再到跨多台计算机的集群计算,以及现在回到一台计算机上的许多CPU /核心。 MPI是一种可以在许多不同架构中运行的标准。
当然,可以使用具有OpenMP等语言框架的线程来编写并行设计。我听说过依赖于理论上可以在任何地方运行的单独处理的多组件GUI /应用程序。实际上,前者比后者更多。
可能主要区别在于程序在多台机器上运行时,使用多线程是不切实际的,共享内存的现有应用程序将无法工作。
答案 1 :(得分:2)
这个问题有点令人困惑,因为您可以在多个线程中执行并行操作,但所有多线程应用程序都不使用并行计算。 在并行代码中,通常有许多“工作者”使用一组数据来异步返回结果。但多线程用于更广泛的范围,如GUI,阻止I / O和网络。
在单个或多个CPU上的变化不会太大,因为管理依赖于操作系统如何处理线程和进程。
多线程在任何地方都会有用,并行不是日常计算范例,因此它可能是职业前景中的“利基”。
答案 2 :(得分:2)
我在.NET 4.0中看到的一些演示,并行代码更改似乎比执行线程更容易。 “For Loops”和支持并行处理的其他东西有新的语法。所以有区别。
我认为将来你会做到这两点,但我认为Parallel支持会更好,更容易。你仍然需要线程用于后台操作和其他事情。
答案 3 :(得分:1)
事实是,您无法在单个CPU上实现“真正的”并行性。有几个库(例如C的MPI)对这个领域有所帮助。但是,在开发流行的解决方案的开发人员中并没有使用并行的概念。
由于在单个CPU上引入了多个内核,多线程现在很常见,由于线程库和线程安全类型,方法,类等,在每种语言中实现都很容易且几乎透明。通过这种方式,您可以模拟并行性。
无论如何,如果你从这开始,首先阅读有关并发和线程主题的内容。当然,线程+并行性能很好地协同工作。
答案 4 :(得分:1)
并行编码是并行执行多个操作(同一时间)的概念。
单个处理器上的多线程给人以 parallel 运行的错觉。在后台,处理器根据线程的优先级在线程之间进行切换。
多个处理器内核上的多线程是真正的并行。每个微处理器都运行一个线程。因此,一次有多个并行的并发任务发生。
答案 5 :(得分:0)
我不确定您认为“并行编码”是什么,但并行编码,据我所知,它指的是生成由CPU并行执行的代码,因此多线程代码属于该描述。
通过这种方式,显然你可以互换使用它们(因为一个落在另一个里面)。
尽管如此,我建议你慢慢来,并开始学习基础知识。了解为什么多线程变得越来越重要,进程,线程和光纤之间的区别是什么,如何同步它们等等。
请记住,并行编码,就像你所说的那样,非常复杂,特别是与顺序编码相比,所以要做好准备。也不要急于进入它。仅仅因为你使用3个线程而不是一个线程不会使你的程序更快,它甚至可以使它更慢。你需要了解方法和方法。并非所有东西都可以并行,而不应该是可以的。
答案 6 :(得分:0)
用简单的语言 多线程可以在CPu中单独使用 并行编程是由编译器完成的显式任务,也可以是由程序员“#pragma”
编写的构造