【问题标题】:C parallel thread vs parallel processC并行线程与并行进程
【发布时间】:2019-04-02 21:42:23
【问题描述】:

我有一个使用大量 cpu 的小型 c 程序,该程序编译为 exe,我将它作为我的 c# gui 中的进程运行。

当我想在我的所有 cpu 内核上并行运行它时,我有 2 个选项。

我有 4 个 cpu 核心。

  1. 从我的 c# 中将这个 c exe 作为 4 个进程运行,这样我的操作系统就会为每个核心分离这些进程 1。

  2. 编辑我的 c 代码,使其运行 4 个线程,因此 os 将为每个内核分离 1 个线程,并从 c# 中将其作为 1 个进程运行。

哪种方式会更快?

编辑:这些进程/线程将运行 3-5 小时,并且不需要在另一个线程/进程之间进行通信。

所有这些都在 Windows 上运行

【问题讨论】:

  • 这将取决于很多因素,例如进程运行多长时间,它们执行什么操作,它们是否(以及多少)需要相互通信等等在。找出答案的最好方法是两种方法都试一下,看看是否有影响,如果有,影响多少。
  • 您需要提供更多信息。在并行线程上运行速度很可能比在单线程上运行得慢,这取决于它们执行的任务。

标签: c windows multithreading parallel-processing


【解决方案1】:

在 C 中运行 4 个线程将比在 C# 中运行 4 个进程更快。

在进程之间切换比在线程之间切换的惩罚更高,并且进程之间的通信比线程之间慢。

【讨论】:

    【解决方案2】:

    分配一个进程需要更多的时间来分配一个线程,因为线程共享资源(代码、数据...)

    如果您的 cpu 不断更改进程(这通常发生)不是使用进程的更好解决方案,那么使用线程会更有效,特别是对于单个 cpu 系统...

    https://stackoverflow.com/a/200543/3476815

    【讨论】:

    • 我编辑并添加了更多细节,因为这些进程需要运行 3-5 小时,因此相对于总运行时间而言分配可以忽略不计
    • 你无法控制cpu,操作系统可以一直不断地改变进程...
    猜你喜欢
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2021-12-12
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 2017-05-31
    相关资源
    最近更新 更多