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

时间:2014-03-21 01:54:32

标签: c++ multithreading

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

When to use multithreading in C++?

7 个答案:

答案 0 :(得分:2)

当您有资源密集型任务(如巨大的数学计算)或I / O密集型任务(如读取或写入文件)时,请使用多线程。

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

答案 1 :(得分:1)

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

我认为此链接可以帮助您。

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

答案 2 :(得分:1)

主要是当你想要同时完成任务时。例如,您可能希望窗口在游戏中加载关卡时或者当您一次下载多个文件时仍然响应用户输入,等等。这些事情实际上不能等到其他处理完成。当然,两者都可能因此而变慢,但它确实给出了同时发生多种事情的错觉。

答案 3 :(得分:1)

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

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

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

正如其他人所说,只有在您需要的时候才应该考虑这样做,它会变得很复杂并且难以调试。

答案 4 :(得分:1)

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

答案 5 :(得分:1)

  

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

嗯 - 一般的经验法则是:在它可以加速你的应用程序时使用它。答案并非真正取决于语言。

如果您想获得深入的答案,那么您必须考虑以下几点:

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

答案 6 :(得分:0)

我的两分钱。

用例:

  1. 将您的应用程序集成到已运行循环的lib / app中。如果无法集成到其他应用程序中,则需要自己的线程来同时运行代码。
  2. 任务拆分。有时候在线程中组织不相交的任务是有意义的,例如将声音与图像处理分开。
  3. 性能。当你想改善某项任务的throghput时。
  4. 建议:

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