首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程级并行与进程级并行

线程级并行与进程级并行
EN

Stack Overflow用户
提问于 2019-01-17 08:06:51
回答 2查看 1.9K关注 0票数 2

我对线程和进程有基本的理解,我想知道为什么每一本教科书都谈到线程级并行性,进程级并行性是否存在?与进程级并行相比,线程级并行的优点是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-17 13:24:37

简单回答:性能和编程方便

较长的答覆:

首先,必须考虑两种不同的并行性:基于任务的并行(或“宏并行”)(例如,任务A修改一些数据并将结果传递给任务B)和数据级并行(或“微并行”)(例如,处理大型矩阵或向量的负载分布在多个并行代理中)。

第二,当考虑并行性时,不同的代理需要交换信息。对于线程级的并行性,所有线程都可以访问相同的地址空间,通信只是内存访问。相反,进程级并行需要特定的方法来实现进程间通信(IPC),以允许进程交换数据。有几种IPC方法(管道、共享-mem、套接字等)(例如,请参见沟通)。

问题是,这些方法通常具有重要的开销,通信可能需要几个耗时的数据副本。这就是为什么它们目前很少在一个过程中使用的主要原因。但是,当考虑进程在不同的和潜在的远程处理器上运行时,进程级的并行性被广泛使用。例如,客户机-服务器应用程序是进程级并行。

在单个处理器上,进程级并行目前也用于shell脚本,作为重用现有程序的一种简单方法。例如,在unix上,像“排序< a_large_file \ uniq”这样的脚本是进程级并行性。可能不是实现此操作的最有效方法(就性能而言),但如果考虑编程时间,则完全是无与伦比的。

此外,线程级并行的最大优点是:

1)通过共享内存实现简单快速的通信机制

2)能够很好地适应任务级并行或数据级并行。

3)易于编程

第二和第三点可能是最重要的。虽然线程级并行可以基于独立的任务,但是速度通常是有限的,大多数现有的应用程序依赖于数据级别的并行性,而线程是很好地适应这种并行性的。公共内存空间使得通信开销非常有限(除非考虑锁),而且存在非常高效和易于使用的并行化工具(例如open-MP)。

在独立进程上实现这种并行也是可能的。在考虑大型计算机进行高性能计算时,甚至经常发生这种情况。有些工具(例如“消息传递接口”)是存在的,但与线程级的并行性相比,实现要复杂得多,容易出错,效率也低。

票数 3
EN

Stack Overflow用户

发布于 2019-08-03 22:55:25

进程级并行性存在。

但是,Linux内核不知道线程或进程。它只知道任务。

有由进程或线程执行的平行性

线程是与父任务共享大部分资源(地址空间、mmap、管道、打开的文件处理程序、套接字等)的任务。并行性不可避免的问题是资源共享。

还有Linux来控制线程之间共享或不共享多少资源,这提供了更多的灵活性。

这就是为什么线程级的并行性更流行的原因,特别是在为商业服务器(如数据库)编写的应用程序中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54231481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档