multithreading - CPU 最大线程数
问题描述
这与处理器的线程有什么关系?例如,Intel i5 有四个内核和四个线程。
我们的程序可以使用多少个线程?例如在 C++ 中使用 std :: thread (STL)?
8个线程是程序的大线程数还是线程数少?
解决方案
这真的取决于。根据经验,将线程数限制为接近内核数(否则您可能会有太多的上下文切换)。您可以std::thread::hardware_concurrency()
用作提示。通常,您使用线程池来组织程序。
然而,真正重要的是活动线程的数量。一些程序有数百个线程,但经过组织,在任何给定时刻只有少数线程处于活动状态(即可运行),而其中大多数处于空闲状态(等待 IO,或某些互斥锁或条件变量)。
请注意,线程是一个非常重的资源(特别是因为它有自己的调用堆栈,通常至少有 1 兆字节)。所以不要有太多的线程(因此,拥有数千个线程通常是不合理的,除非你有一台非常强大和扩展的计算机)。
英特尔超线程技术常常令人失望。您可能不希望在具有 4 个内核和 8 个超线程的 Intel 处理器上拥有 8 个活动线程。您需要进行基准测试,但在这种情况下您应该会遇到一些糟糕的性能(也许拥有 4 或 6 个活动线程会使您的整体性能更好)。
线程是由操作系统提供和管理的抽象。所以阅读操作系统:三个简单的部分来了解更多关于操作系统的信息。
推荐阅读
- sql - 在日期时间范围之间添加行
- amazon-web-services - AWS Athena WAF 日志
- python - 在 x 时间后中断 while 循环,但在同一级别继续 for 循环
- android - 在 Android 通知中禁用声音(不改变视觉行为)
- swiftui - 自定义导航栏 SwiftUI 上仅显示后退按钮
- elasticsearch - 索引具有通配符时的弹性搜索
- javascript - 动态计算 2 个输入的总和 - Javascript
- ruby-on-rails - NameError:未初始化的常量 GoogleService::Google with google-api-client gem
- azure-functions - Azure 持久编排 - 编排完成后引发事件
- python-3.x - 如何在python中使用正则表达式获取文件中的所有匹配组