gpt4 book ai didi

c++ - 线程数量和线程阻塞时间之间的平衡在哪里?

转载 作者:行者123 更新时间:2023-11-30 02:08:46 29 4
gpt4 key购买 nike

加长问题:
当阻塞线程多于 CPU 内核时,线程数量和线程阻塞时间之间的平衡点在哪里,以通过减少上下文切换开销来最大化 CPU 效率?

我有各种各样的 IO 设备需要在 Windows 7 上控制,带有 x64 多核处理器:PCI 设备、网络设备、保存到硬盘的内容、正在复制的大块数据,.. . 最常见的策略是:“在上面放一根线!”。几十个线程之后,我开始觉得这是个坏主意。

我的核心都没有 100% 使用,有几个核心仍在空闲,但出现 10 到 100 毫秒范围内的延迟,无法用 IO 阻塞或 CPU 密集使用来解释。其他进程似乎也不需要资源。我怀疑上下文切换开销。

我有很多可能的解决方案:

  • 通过捆绑相同的 IO 设备来减少线程:这主要适用于硬盘驱动器,但也可能适用于网络。如果我在一个线程中将 20MB 保存到硬盘驱动器,在另一个线程中保存 10MB,将它们全部发布到同一个线程不是更好吗?如果有多个硬盘驱动器,这将如何工作?
  • 通过捆绑类似的 IO 设备来减少线程,并提高它的优先级:数十个具有更高优先级的线程可能会使我的用户界面线程卡顿。但我可以将所有这些功能捆绑在一个或几个线程中,并提高它的优先级。

非常感谢任何解决类似问题的案例研究。

最佳答案

首先,听起来这些任务应该使用异步 I/O(最好是 IO 完成端口)而不是单独的线程来执行。阻塞线程通常是执行 I/O 的错误方法。

其次,阻塞的线程不应影响上下文切换。调度程序必须兼顾所有事件 线程,因此,运行大量线程(未阻塞)可能会稍微减慢上下文切换速度。但只要您的大部分线程被阻塞,它们就不会影响未阻塞的线程。

关于c++ - 线程数量和线程阻塞时间之间的平衡在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6184658/

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