gpt4 book ai didi

C++ - 关于多线程的问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:36:51 27 4
gpt4 key购买 nike

我无法理解多线程的一些概念。我知道基本原理,但无法理解内核何时发送和使用各个线程。

我知道拥有多个线程可以让代码并行运行。我认为这将是我的存档提取程序的一个很好的补充,它可以使用多核解压缩 block 。它在一个 for 循环中解压缩所有文件,我希望每个可用的内核都能处理一个文件。

这是我的问题:

  1. 我是否需要查询甚至考虑机器上的核心数,或者当线程运行时,它们会自动发送到空闲核心?

  2. 谁能给我一个使用线程的 for 循环的例子。说在每个循环迭代中它会调用一个使用不同线程的函数。我读到要激活的理想线程数是核心数。我如何知道内核何时空闲,或者我是否应该检查它是否已加入主线程,并在它必须保持一定数量的线程运行时创建一个新线程。

我是不是让事情过于复杂了,或者我的问题是否表明我没有掌握这些概念?

最佳答案

如果您正在解压缩文件,那么您可能需要有限数量的线程,而不是每个文件一个线程。否则,如果您要处理 1000 个文件,您将创建 1000 个线程,这将无法有效利用 cpu。

正如您所提到的,一种方法是创建与核心一样多的线程,这在您的情况下是一种合理的方法,因为解压缩是合理的 cpu 绑定(bind),因此您创建的任何线程都将在大多数情况下处于事件状态他们的时间片。如果您的问题与 IO 绑定(bind)有关,那么您的线程将花费大量时间等待 IO 完成,因此在一定范围内,您可能拥有比内核更多的线程。

对于您的应用程序,我可能会考虑为每个核心启动一个线程,并让每个线程一次处理一个文件。这将有助于使您的算法保持简单。如果您有多个线程处理一个文件,那么您必须在它们之间进行同步,以确保它们处理的 block 被写到未压缩文件中的正确位置,这将导致不必要的麻烦。

C++11 包含一个 thread library您可以使用它来简化线程的使用。

关于C++ - 关于多线程的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21039146/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com