【发布时间】:2019-11-22 16:59:31
【问题描述】:
线程和并行有什么区别?
谁比谁更有优势?
【问题讨论】:
-
汽车和驾驶有何不同?线程是使用线程的行为,并行是当某些东西并行运行时。使事情并行运行的最常见方法是使用线程。
标签: multithreading parallel-processing
线程和并行有什么区别?
谁比谁更有优势?
【问题讨论】:
标签: multithreading parallel-processing
Daniel Moth (a former coworker of mine)- Threading/Concurrency vs Parallelism 文章说明了一切。
引用:
为了充分利用我们软件的多个内核,最终 必须使用线程。由于这个事实,一些开发人员陷入了困境 将多线程等同于并行的陷阱。那不是 准确...您可以在单核机器上进行多线程处理,但是 你只能在多核机器上进行并行处理
快速测试:如果您在单核机器上使用线程并且它对您的场景非常有意义,那么您不是在“做并行”,您只是在做多线程。
【讨论】:
有两种不同的并发:
如您所见,它们解决了完全不同类型的问题。
【讨论】:
线程通常是指让多个进程在单个 CPU 上同时工作(实际上您认为它们不会,但它们之间的切换速度非常快)。
并行性是指多个进程同时在多个 CPU 上工作。
两者都有其优缺点,很大程度上取决于您的操作系统使用的调度程序。通常,创建线程的计算成本比在另一个 CPU 上生成进程要低得多,但是为自己拥有一个“完整”的 CPU 会提高该进程的整体速度。但话又说回来,如果该进程需要与另一个 CPU 上的另一个进程通信,则您需要解决 IPC(进程间通信)问题,这可能是一种开销,因此在同一个 CPU 上使用一个线程实际上会更好。
大多数操作系统都知道多个 CPU/内核并且可以使用它们,但这使得调度程序通常非常复杂。
如果您正在使用使用 VM(虚拟机)的语言进行编程,请注意他们需要实现自己的调度程序(如果有的话)。 例如,Python 使用 GIL,它几乎表示在该 VM 上运行的所有内容始终保持在同一个 CPU 上。尽管某些操作系统能够将繁重的进程迁移到另一个目前不那么忙的 CPU,这当然意味着在执行此操作时需要暂停整个进程。
像 DragonFlyBSD 这样的一些操作系统采用完全不同的方法来调度,而不是目前的“标准”方法。
我认为这个答案为您提供了足够的关键字来搜索更多信息:-)
【讨论】:
并行是一种使用多个指令流来完成计算的通用技术。所有并行技术的关键方面是在流之间进行通信以协作最终答案。
线程是并行的特定实现。每个指令流都有自己的堆栈来记录局部变量和函数调用,并通过共享内存与其他流隐式通信。
一个例子可能是让一个线程简单地将磁盘请求排队并将其传递给工作线程,从而有效地并行化磁盘和 CPU。传统的 UNIX 管道方法是将它们拆分为两个完整的程序,在命令中说“cat”和 grep:
cat /var/log/Xorg.0.log | grep "EE"
可以想象,线程可以降低将磁盘 I/O 从 cat 进程复制到 grep 进程的通信成本。
【讨论】:
线程是一种技术,并行是一种可以使用线程实现的范例(但也可以很容易地在多个处理器上使用单个线程来实现)
【讨论】:
线程是穷人的并行。
编辑:更准确地说:
线程与并行无关,反之亦然。线程是关于让一些进程并行运行的感觉。但是,这并没有使进程总体上完成所有他们的动作更快。
【讨论】:
这是消除任何人对并行性和线程相关的疑虑的最佳答案。
线程是一种软件结构。即使在旧的单核处理器上,我也可以启动任意数量的 pthread。所以多线程不一定是并行的:只有硬件可以支持它才是并行的。因此,如果您有多个内核和/或超线程,您的多线程将变为并行。而如今,事实上大部分时间都是这样。
并发是关于没有明确时间顺序的活动。同样,如果硬件支持,它们可以并行完成,如果不支持,则不。
因此,传统上多线程几乎是并发的同义词。并且它们只有在硬件支持的情况下才会并行。即便如此,您也可以启动比硬件支持更多的线程,并且剩下的就是并发。
【讨论】:
您如何定义“并行性”?多线程是并行程序执行概念的具体实现。
RichardOD 链接的文章似乎主要关注线程是否实际上在具体机器上并行执行。
但是,您的问题似乎将多线程和并行性视为对立面。您可能是指使用多个进程而不是多个线程的程序?如果是这样,区别是:
【讨论】:
如果我们认为CPU 是一个公司,线程是它的工人,那么它有助于我们更容易地理解线程和并行性。
就像一个公司有很多工人一样,CPU 也有很多线程。
还可能有不止一家公司,因此可能有不止一个 CPU。
因此,当工人(线程)在公司(CPU)中工作时,它被称为线程。
当两个或多个公司(CPU)独立或共同工作时,称为并行。
【讨论】: