【C++】std::thread的英文资料整理

2023-11-06

2023年9月10日,周日上午

这篇博客是我对网上的英文资料的整理和翻译


英文资料来自:

c++ - What exactly is an std::thread? - Stack Overflow


When you create a std::thread (assuming you don't use the default constructor), the constructor will use the operating system API to create a native thread, and calls the passed function.

当你创建一个std::thread类的对象,这个类的构造函数会使用操作系统的API去创建一个原生的线程,并调用你传递进来的函数。

std::thread represents a thread, managed by the operating system. It has its stack, registers, instruction pointer etc. However, it is still managed by the OS. The operating system handles all the scheduling, assigning the thread to the hardware core and then preempting it if necessary to do another work on that core.

std::thread类代表一个被操作系统管理的线程。这个线程有自己的栈、寄存器、指令指针等等。操作系统掌握所有的线程调度,能够把线程分配给CPU的核心,还可以在其他任务需要CPU的核心时停止线程。

If you launch more threads than there are cores on your CPU, and they all run all the time, the OS will start swapping them in and out, effectively keeping them all running. However, this swapping is not for free, and you can slow everything down if you have too many of them.

如果你启动的线程数比CPU的核心数要多,并且这些线程会一直运行,那么操作系统会开始交替执行这些线程,以确保这些线程能有效地”同时“运行。但是,交替运行是有代价的,如果你有太多的线程,那么你会让一切事情变慢。

However, if your threads are halted for whatever reason -- for example, you threads stop on a mutex, wait on a condition variable, or simply goes to sleep (e.g. via std::this_thread::sleep_for), then it no longer consume the hardware resources during that wait.

如果你的线程因为某些原因休眠了,那么这个线程在休眠期间不会再消耗任何硬件资源。

The operating system has a subsystem called "process scheduler" which allocates the time of the hardware CPU cores (or logical core in case of hyper threading, which I assume is what you mean by "hardware thread") time for each of the threads running on the system. The number of (logical) cores the CPUs of the system has affects how many threads can be executed in parallel, but doesn't limit how many threads the operating system can manage.

As such, nothing in particular will happen or will stop happening. If your system has more threads ready to run than number of (logical) CPU cores, then the operating system will not be able to give CPU time to all of the threads in parallel.

Note that creating native threads has a performance penalty, and having more threads waiting to run (excluding those waiting for disk or network) than the number of cores to execute them will reduce the performance of the system.

操作系统有一个负责进程调度的子系统,这个子系统会分配CPU的核心的时间给每一个运行在操作系统上的线程。CPU的核心数决定能有多少线程可以并行,但不会限制能有多少线程并发。

即使准备运行的线程数比CPU的核心数要多,也不会有什么事情发生或停止运行,只是操作系统会没有足够的CPU时间来进行并发。

需要注意的是创建原生线程有性能上的损耗。因为等着被执行的线程要比CPU的核心数多时会降低系统的性能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【C++】std::thread的英文资料整理 的相关文章

  • C#9 顶级语句文件上的属性

    我正在尝试向顶级语句文件添加属性 但没有找到任何相关信息 是否可以 对于某些上下文 我想仅在该文件中禁用规则 SuppressMessage StyleCop CSharp LayoutRules SA1516 ElementsMustBe
  • .NET Windows 服务中调用 C# 的 wait 的 I/O 回调是否可以不阻塞?

    我知道在 ASP NET 中 当使用 wait 时工作线程会返回到池中 而 I O 发生在后台 这对于可扩展性非常有用 我的 Windows 服务是一个套接字服务器 它使用 Begin End 样式的异步套接字 I O 混合我的魔法 我知道
  • C/C++ 中随机数生成器的实现[重复]

    这个问题在这里已经有答案了 我对 C 中随机数生成器的实现有点困惑 它也与 C 中的明显不同 如果我理解正确 对 srand seed 的调用会以某种方式初始化可通过 rand 访问的隐藏变量 种子 该变量又将函数指向预先生成的序列 例如例
  • 如何将 C++ 类包装在基于 C 的 dll 或基于 CLI 的 dll 中?

    我被告知将我用 C 编写的类导入到 dll 中 然后在 c 应用程序中使用该 dll 下列的本指南 https stackoverflow com questions 4555961 how to use a class in dll我创建
  • 浏览器收集哪些值作为回发数据?

    当页面被发送回服务器时 浏览器收集每个控件的当前值并将其粘贴到一个字符串中 然后 该回发数据通过 HTTP POST 发送回服务器 Q1 除了控件的 Text 属性和 SelectedIndexchanged 因此除了用户输入数据 之外 控
  • C++:获取注册表值仅给出第一个字符[重复]

    这个问题在这里已经有答案了 我试图从注册表中获取字符串值 但我只得到第一个字母 HKEY hKey char gamePath MAX PATH if RegOpenKeyEx HKEY CURRENT USER L Software Bl
  • 实体框架7审计日志

    我正在将一个旧项目移植到 ASP NET 5 和 Entity Framework 7 我使用数据库优先方法 DNX 脚手架 来创建模型 旧项目基于Entity Framework 4 审计跟踪是通过重写实现的SaveChanges的方法D
  • 未定义异常变量时通过引用捕获

    捕获异常时 标准指导是按值抛出 按引用捕获 据我了解 这有两个原因 如果由于内存不足异常而引发异常 我们将不会调用可能终止程序的复制构造函数 如果异常是继承层次结构的一部分 我们可能会对异常进行对象切片 如果我们有一个场景 我们没有在 ca
  • 首先EntityFramework数据库 - 类型映射 - 将binary(8)从SQL映射到C#中的int

    在 SQL 内部 我有一个主键为二进制 8 的表 当我使用该表添加到我的模型中时Update Model from Database我可以看到该列有 type Binary 在 C 中 我将该列设为byte 我可以将该列映射到 int 吗
  • 我们应该使用 Eval 还是 Databind 事件?

    当使用 Asp Net 并使用 ListView 等控件创建网站时 使用 Eval 命令是一个好习惯吗 还是应该在 databind 事件中填充文字和数据 取决于您是否想在更新事件上写回数据 在这种情况下数据绑定 如果您只想读取该数据 可以
  • C++ 析构函数:何时释放内存?

    如果我删除一个导致其析构函数被调用的对象 那么内存是在析构函数完成函数中的任何操作之前还是之后被释放 仅当最小派生类子对象被销毁后才会释放内存 所以如果你有 class Base class Derived public Base publ
  • ASP MVC 5 - 403 customError 不起作用

    我正在尝试为我的应用程序创建自定义错误页面 它在大部分情况下都有效 但不适用于403 errors 我的网络配置
  • AspNetCore.SignalR:无法启动未处于初始状态的连接

    我无法让 ASP NET Core SignalR 应用程序正常运行 我有这个服务器端代码 public class PopcornHub Hub private int Users public async Task BroadcastN
  • 从存储过程返回 int 值并在 ASP.NET 代码中检查它以验证登录表单

    当我多次尝试但没有得到有效结果时 使此代码运行的真实顺序是什么 SQL存储过程的代码 set ANSI NULLS ON set QUOTED IDENTIFIER ON GO ALTER PROC dbo login proc usern
  • 为什么我的 ITexthandler 不工作?我正在尝试将 XML 解析为 ITextSharp 文档

    我正在使用 Visual Developer 2010 MVC 3 c 我正在尝试将 XML 解析为 iTextSharp 文档 如下所示 ITextHandler textHandler new ITextHandler doc text
  • 如何使用eclipse构建C++应用程序

    我已经从以下位置下载了 Eclipse Juno for C here http www eclipse org downloads download php file technology epp downloads release ju
  • 检索 Autofac 容器以解析服务

    在 C WindowForms 应用程序中 我启动一个 OWIN WebApp 它创建另一个类 Erp 的单例实例 public partial class Engine Form const string url http 8080 49
  • printf 参数不足

    我的问题是关于缺少参数的 printf 之后的行为 printf s blah blah d int integer was given as argument and not int written 我已经知道 如果格式参数不足 则行为是
  • 获取大于某个数字的元素个数

    我正在尝试解决以下问题 数字被插入到容器中 每次插入数字时 我需要知道容器中有多少元素大于或等于当前插入的数字 我相信这两个操作都可以以对数复杂度完成 我的问题 C 库中有标准容器可以解决这个问题吗 我知道std multiset可以在对数
  • XmlDocument Save 使文件保持打开状态

    我有一个简单的 C 函数 可以创建一个基本的 XML 文件并保存 private void CreateXMlFile string Filename string Name string Company XmlDocument doc n

随机推荐

  • 猿如意中的【blender】工具详情介绍

    文章目录 一 工具名称 二 下载安装渠道 2 1 什么是猿如意 2 2 如何下载猿如意 三 工具介绍 四 blender介绍 4 1 blender简介 4 2 背景 4 3 主要功能 五 软件安装过程 5 1 如何在猿如意中下载开发工具b
  • 散列表习题

    1 考虑key的集合S 0 8 16 24 32 40 48 56 64 用除余法构造的散列函数 h1 key key 12 h2 key key 11 h1将S映射到的值域有几个元素 3 h2将S映射到的值域有几个元素 9 2 散列表的规
  • 【1分钟解决VS试用期到期】——登录用户时浏览器跳转失败

    登录 按钮下的 账户选项 将会默认跳转到左侧 环境 选项下的 账户 此界面中右上的 嵌入式Web浏览器 改为 系统Web浏览器 即可正常跳转登录 若没有微软账户可免费注册
  • easy poi 实现Excel文件的导入导出(SpringBoot整合)

    easypoi功能如同名字easy 主打的功能就是容易 让一个没见接触过poi的人员 就可以方便的写出Excel导出 Excel模板导出 Excel导入 Word模板导出 通过简单的注解和模板 语言 熟悉的表达式语法 完成以前复杂的写法 码
  • Win11任务栏怎么变小?Win11任务栏变小的设置方法

    很多Win11用户觉得win11任务栏太大了 用起来很不习惯 想要把任务栏变小 那要怎么进行操作 Win11的任务栏怎么变小 方法其实很简单的 系统之家小编这就分享给你 还不清楚的小伙伴们 快跟着小编一起来看看怎么操作吧 操作方法具体步骤
  • chatgpt赋能python:如何用Python进行数据清洗

    如何用Python进行数据清洗 在数据分析领域 数据清洗是非常重要的一步 因为原始数据往往包含大量的错误 缺失或者不一致的部分 对于这些 脏 数据 如果不进行清洗和处理 就会影响到后续的分析和建模工作 那么 如何用Python进行数据清洗呢
  • envi5.6处理gf3(SAR)详细过程记录

    未完结 待更新 可以参考的处理教程 SAR影像 雷达影像 的预处理 ENVI SARscape多极化单通道数据预处理流程 SARSCAPE中单雷达影像基础处理全过程 本文所使用的文件名 GF3 KAS UFS 017384 E108 9 N
  • 我的世界为什么服务器不显示皮肤,我的世界为什么皮肤没显示,为什么皮肤显示不出来怎么办...

    要正版账号盗版的话如果有皮肤MOD的话就可以看见了必须是安装了这个MOD的人才能看见 为什么显示不出更改后皮肤 用指令指令 skinset代码 英文或数字 怎么才能让我的世界人物皮肤能显示在服务器中 让每个玩家能看到 非官方的不好显示的 为
  • 2021-02-05

    1 字体类型 对于创造不同字体的文字类型时 每一个类型都得重新定义CFont 和 CStatic CStatic m cstatic title 标题名 CStatic m CStatic sys status CFont m Font C
  • mysql binlog 大小设置问题

    mysql开启了二进制日志binlog 如mysql bin 000005等 重启服务后会自动更新这个文件 如原来是000005的话会生成000006 请问 如果服务一直不重启 什么情况下会自动产生新的日志文件呢 是大小到了一定量时自动产生
  • 2016年中总结

    时间飞快 2016年上半年中收获很多 项目 学习 实习等 感慨颇多 一 学习 项目 走过BS 进入了Java的世界 在项目中实践对于自己的知识有了一个梳理和巩固 期间经历了ITOO5 0基础系统 对于基础系统的业务有了更多的了解 图书馆系统
  • 以不同的方向来处理数据倾斜

    一 程序层面 比如说在Hive中 经常遇到count distinct 操作 这样会导致最终只有一个Reduce任务 我们可以先group by 再在外面包一层count 就可以了 比如计算按用户名去重后的总用户量 优化前 只有一个redu
  • android开发之recycleView的adapter理解

    之前很长时间都是使用的listview 然后自己写适配器 主要都是继承自BaseAdapter 大致的思路呢 就是我们传入数据源以及上下文对象 然后我们在自定义适配器文件中实现了构造方法 然后将传入的上下文对象 context 以及数据源初
  • 【流水线】FPGA中流水线的原因和方法

    目录 写在前面 什么是流水线 无流水线设计 流水线设计 流水线的后果 结论 写在前面 对 FPGA 现场可编程门阵列 进行编程是一个定制其资源以实现确定逻辑功能的过程 这涉及使用FPGA的基本构建模块 如可编程逻辑模块 CLB 专用多路复用
  • 【MATLAB第62期】基于MATLAB的PSO-NN、BBO-NN、前馈神经网络NN回归预测对比

    MATLAB第62期 基于MATLAB的PSO NN BBO NN 前馈神经网络NN回归预测对比 一 数据设置 1 7输入1输出 2 103行样本 3 80个训练样本 23个测试样本 二 效果展示 NN训练集数据的R2为 0 73013 N
  • html标签总结之表格标签

    1 表格标签 表格属性 border 表格边框 写在table标签里面 数值代表边框像素 cellpadding 单元格内的空间 写在table标签里面 数值代表空间像素 cellspacing 单元格之间的空间 写在table标签里面 数
  • 线性代数——LU(LR)分解

    文章目录 定义 为什么要LU分解 为什么能做到LU分解 利用LU分解求行列式值 利用LU分解求解线性方程组 利用LU分解求逆矩阵 对角线上元素有0的情况 定义 定义 给定矩阵A 将A表示成下三角矩阵L和上三角矩阵U的乘积 称为LU分解 再进
  • 哄小姑娘的简单小密码

    老师让自由练习 给闺蜜搞个了密码表白 把她高兴的发了个朋友圈哈哈哈 include
  • QT之如何引用dll和头文件

    在QT中 我们在安装时默认安装了很多自带的类 比如画图用的QCharts等 但是当我们想使用一些其他功能的类时 我们应该怎么引入这些类呢 1 我们需要下载对应的dll和头文件 这些在网上都可以找到 以我的电脑上为例 weekday是项目的主
  • 【C++】std::thread的英文资料整理

    2023年9月10日 周日上午 这篇博客是我对网上的英文资料的整理和翻译 英文资料来自 c What exactly is an std thread Stack Overflow When you create a std thread