何时在C++中使用多线程

When to use multithreading in C++?

本文关键字:多线程 C++ 何时      更新时间:2023-10-16

我是C++程序员(中级(,现在正在学习多线程。我发现在C++中什么时候使用多线程很困惑?我怎么知道我需要在节的哪一部分使用多线程?

When to use multithreading in C++?

当您有像大型数学计算这样的资源密集型任务,或者像读取或写入文件这样的I/O密集型任务时,应该使用多线程。

目的应该是,您可以同时运行多个事物(任务(,这样可以提高应用程序的性能和响应能力。此外,在应用程序中实现多线程之前,请先了解同步。

何时在C++中使用多线程?`

好吧,一般的经验法则是:在可以加速应用程序的时候使用它。答案并不完全取决于语言。

如果你想得到一个深入的答案,那么你必须考虑以下几点:

  1. 是否可以在代码内部实现多线程?你有可以同时计算并且与其他计算无关的碎片吗
  2. 多线程值得实现吗?你的程序运行得慢吗?即使你尽了全力让它尽可能快
  3. 您的代码会在支持多线程(因此有多个处理单元(的机器上运行吗?如果你为某种只有一个核心的机器设计代码,那么使用多线程是浪费时间
  4. 是否有不同的选项?一个更好的算法,清理代码等等?如果是这样的话,也许使用它而不是多线程更好
  5. 当整个应用程序必须不断运行时,您是否必须及时处理难以预测的事情?例如,在游戏中从服务器接收一些信息

这是一个有点主观的主题。。。但我倾向于在以下两种情况中的一种情况下使用多线程。

1-在性能关键的情况下,需要最大的功率(当然算法支持并行性(,对我来说,是矩阵乘法。

2-很少有一个线程可以更容易地管理一些相当独立的东西。经典的是联网,可能有一个线程阻塞等待连接,并生成线程来管理每个线程。这很有用,因为线程可以及时阻塞和响应。假设你有一个服务器,一个请求可能需要磁盘访问,这很慢,另一个线程可以在字段中跳转一个不同的请求,而第一个线程正在等待它的数据。

正如其他人所说,只有当你需要的时候,你才应该考虑去做,它会很快变得复杂,并且很难调试。

多线程是一种专门的多任务处理形式,多任务处理是允许计算机同时运行两个或多个程序的功能。

我认为这个链接可以帮助你。

http://www.tutorialspoint.com/cplusplus/cpp_multithreading.htm

大多数情况下,当您希望同时完成任务时。例如,当一个级别加载到游戏中时,或者当你一次下载多个文件时,你可能希望一个窗口仍然对用户输入做出响应。当然,两者都可能因此而变慢,但这确实给人一种同时发生多种事情的错觉。

当您可以通过并行操作来加快算法速度时,请使用多线程。当线程需要访问父进程的资源时,使用它来反对多处理。

我的两分钱。

用例:

  1. 将您的应用程序集成到已经运行循环的lib/app中。如果你不能集成到其他应用程序中,你需要一个自己的线程来同时运行你的代码
  2. 任务拆分。有时在线程中组织不相交的任务是有意义的,例如在将声音与图像处理分离时
  3. 性能。当你想提高某项任务的吞吐量时

建议:

  1. 在一般情况下,如果单线程解决方案就足够了,就不要进行多线程处理。它增加了复杂性
  2. 必要时,从高阶基元开始,例如std::future和std::async
  3. 尽可能避免数据共享,这是争用的根源
  4. 当进入较低级别的抽象时,比如互斥锁等等,用某种模式封装它。你可以看一下这些幻灯片
  5. 将函数与线程分离,并在稍后将线程组合到函数中。也就是说,不要将线程创建嵌入到代码的逻辑中