并发不是并行吗? [关闭]

2024-03-31

Here http://concur.rspace.googlecode.com/hg/talk/concur.html#title-slide这是 Rob Pike 对此的幻灯片。每次我经历这个,我都觉得自己像个白痴。我无法弄清楚它的要点。众所周知,并发是将复杂问题分解为更小的组件。如果你不能正确地将某件事分成更小的部分,那么就很难使用并发来解决它。

但是幻灯片中并没有详细介绍如何在实现并发后获得并行性。在课程幻灯片(编号 52)中,他说并发 - “也许甚至是并行”。但问题是——并发何时以及如何正确有效地实现并行?

我的猜测是,在幕后 Rob 指出开发人员应该在并发级别上工作 - 并且并行性应该是语言/虚拟机的关注点(gomaxprocs?)。只关心智能分解为更小的单元,只关心正确的并发性 - 并行性将由“系统”负责。

请透露一些信息。


罗布·派克的意思是什么

当您想到算法的抽象形式时,您必须选择是否使用消息传递或共享内存或混合来实现它。您还必须考虑内存访问的类型(NUMA、UMA 等)和使用的拓扑(Hypercube、Torus、Ring、Mesh、Tree 等)

对于那些只想以并行方式(例如并行 for)完成某件事(甚至可能很简单)的人来说,这似乎是一项艰巨的工作。

这需要大量工作,特别是如果您更改拓扑(这样您就可以拥有其所有优点)。

因此,您编写并行代码(无论简单还是复杂),VM 或编译器将选择似乎最好的方法,甚至以顺序方式运行!(一个例子是 .net 的任务并行库)

重要编辑:

我应该提到的是,我谈论的是程序/算法中的并发性,而不是系统中运行的独立程序之间的并发性。

你之前这么说

众所周知,并发是将复杂问题分解为更小的组件。如果你不能正确地将某件事分成更小的部分,那么就很难使用并发来解决它

但这是错误的 b/c这些较小的组件可能以顺序方式相互依赖来完成,所以即使你划分成小组件,也不意味着你实现了并发/并行。

在我所有的并行和分布式算法类别中(无论是学士还是硕士)我们从未谈论过“我们获得了并发性,现在让我们看看如何获​​得并行性如果你使用并发这个词来描述和算法,那么你就意味着并行,反之亦然。

在文献中,您还会发现分布式和并行之间只有一线之隔。

从算法的角度来看,您可以使用并发、并行和分布式,并且您会得到相同的想法。

从实现的角度来看,如果你说“并行”,你通常指的是一个在本地计算机或集群上运行的程序(共享内存通信),而当你在网格上运行该程序时是“分布式”的(消息传递通信) 。

现在,分布式和并行性都意味着并发。

我认为你应该对这些术语的确切含义更加怀疑,因为即使在文献中(我谈论的是那些真正为这个领域做出贡献的人,而不仅仅是创造某种语言),它们也被用来表达抽象概念。

算法(无论是程序)的并发性意味着拥有可以独立于其他代码段运行的代码段,即使它们最终会等待其他一些代码段(检查阿姆达尔定律以准确了解其含义)。

因此,只要算法/程序中存在并发性,那么也就具有并行性。

我认为最好只实现一些并行和分布式算法,以更好地理解其背后的想法。如果您了解 C/C++,则可以使用 OpenMPI 进行分布式(消息传递)实现,使用 OpenMP 进行并行(共享内存)实现。

EDIT:

他还可以将并发视为抽象原则,并将并行视为其实现方式[共享内存、消息传递、两者之间的混合;内存访问类型(numa、uma 等)]。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

并发不是并行吗? [关闭] 的相关文章

  • 如何使用多线程

    我有这个代码 import thread def print out m1 m2 print m1 print m2 print n for num in range 0 10 thread start new thread print o
  • 为什么在 WinForms 中可以跨线程添加控件,而在 WPF 中却不能?

    在虚拟 WinForms 应用程序中 我可以在设计时创建 ListBox 在运行时创建后台线程 然后从后台线程将控件添加到 ListBox 但如果我在 WPF 中执行相同的操作 则会出现错误 为什么我可以在 WinForms 中执行此操作
  • Foreach循环无法找到对象

    我正在尝试将 foreach 与并行后端结合使用来加速计算 用于特征选择的 AUCRF 随机森林的交叉验证 如果这确实重要的话 在这样做的过程中 我需要获取向量的子集 向量的名称可以更改 但可以作为字符向量进行访问 我使用 eval par
  • 并行 Haskell - GHC GC 火花

    我有一个正在尝试并行化的程序 带有可运行代码的完整粘贴here http lpaste net 101528 我进行了分析 发现大部分时间都花在findNearest这本质上是一个简单的foldr超过一个大Data Map findNear
  • 从ndk中的不同线程调用java方法

    我正在尝试使用 android 的 NDK 从 C 中的独立线程调用 java 静态方法 到目前为止我已经 JNIEnv env AttachJava jclass cls2 env gt FindClass com actvt showd
  • Android 中的处理程序到处理程序与 Messenger 到 Messenger 通信

    问题 使用起来是否 更好 更快且开销更少 Handler http developer android com reference android os Handler html与使用 Handler 通信相比信使 http develop
  • 如何并行安装/编译 pip 要求(使 -j 等效)

    我的 pip 要求中有很多软件包需要安装 我想并行处理它们 我知道 例如 如果我想要n并行作业来自make我必须写make j n 是否有满足 pip 要求的等效命令 Thanks 有时 pip 使用 make 来构建依赖项 如果在开始之前
  • 在后台线程上搜索

    我试图在 iPhone 应用程序中搜索数千个对象 但是搜索严重滞后 每次击键后 UI 都会冻结 1 2 秒 为了防止这种情况 我必须在后台线程上执行搜索 我想知道是否有人有一些在后台线程上搜索的提示 我读了一点NSOperation并在网上
  • java:为什么主线程等待子线程完成

    我有一个简单的java程序 主线程 main 创建并启动另一个线程t class T extends Thread Override public void run while true System out println Inside
  • BufferBlock 连续

    我想使用以下方式实现消费者 生产者模式BufferBlock
  • 让线程在窗体关闭时保持运行

    我在我的应用程序上创建了一个同步线程 我想知道如果我关闭申请表 是否有办法让该线程保持打开状态 直到完成同步过程 调用线程的WaitFor方法在您的 DPR 文件中 之后Application Run线 如果线程已经运行完毕 那么WaitF
  • 多线程 - 比单线程慢

    当我使用多个线程而不是单线程运行程序时 它会变慢 不是应该更快吗 该程序应该遍历从起始目录开始的所有目录 并查找并打印所有名为 X 的文件 代码如下 while done pthread mutex lock lock if list is
  • 线程数组?

    所以我在理解如何避免线程的顺序执行时遇到了问题 我试图创建一个线程数组并在单独的循环中执行 start 和 join 函数 这是我现在拥有的代码示例 private static int w static class wThreads im
  • 将带有 **kwargs 错误的值线程化并传递给 TypeError

    我对 Python 还很陌生 并且正在通过这篇文章研究如何使用线程来处理某些代码 Python 使用线程或队列迭代调用函数的 for 循环 https stackoverflow com questions 12868956 python
  • C# 为所有对象订阅相同的事件处理程序是线程安全的吗

    我的项目中有一种情况 我连接到多个服务器并监听事件 每当从服务器接收到事件时 Handler 就应该将该事件添加到公共队列中进行处理 所有连接都应将接收到的事件添加到队列中 foreach var item in collection Co
  • 初始化 ConcurrentHashMap 值的最快方法

    ConcurrentHashMap 通常在并发环境中用于聚合某个键下的某些事件 例如计算某些字符串值的命中数 如果我们事先不知道密钥 我们需要有一个好的方法来根据需要初始化密钥 它应该在并发性方面快速且安全 这个问题的最佳模式 就效率而言
  • java:如何设置全局线程ID?

    是否有可能为线程设置唯一ID 在分布式系统中 线程是在许多不同的机器上创建的 例如通过 RMI 我需要它来创建日志消息 根据我的研究 我知道可以使用 log4j mdc ndc 来完成 但只能在单线程中完成 我的问题是 在创建线程时必须设置
  • Java 空值检查

    我有一个thread1 if object null object play 和另一个thread2可以写null into object随时参考 我将同时运行这些线程 我知道thread2可以重写object后参考null检查并会抛出Nu
  • 具有多个参数和返回值的两个并行函数

    我有两个独立的功能 每一个都需要相当长的时间来执行 def function1 arg do some stuff here return result1 def function2 arg1 arg2 arg3 do some stuff
  • 使用多处理和 PySftp 并行下载

    我正在尝试创建一个代码来使用 pysftp 和多处理库下载相同类型的 N 个文件 我做了一个基本的Python训练 得到了一些代码并将它们组合成一个 但我无法让它工作 如果有人帮助我 我将不胜感激 该错误发生在 vFtp close 命令之

随机推荐