放弃当前线程的时间片 C++
Giving up the time slice for current thread in C++
以下语句是否等效于放弃当前线程的时间片的方法?
std::this_thread::sleep_for(std::chrono::milliseconds(0));
std::this_thread::yield;
Sleep(0); // On windows
它们不等效。 std::this_thread::yield
应分别映射到sched_yield
和SwitchToThread
。我说"应该",因为当然,如果依赖于实现。
这些将放弃当前时间片并重新安排。 SwitchToThread
只考虑当前 CPU 上的线程,但不声明调用线程在就绪队列中的位置,除非在同一 CPU 上准备好另一个线程,该线程首先运行。
sched_yield
将线程移动到就绪队列的末尾并重新计划。
Sleep(0)
在Windows下或多或少地做了同样的事情,除了它更不可靠(在50-100毫秒后返回Sleep(0)
并非完全不可能!),并且它不尊重CPU边界,即在另一个CPU上运行的线程可能会被移动。"普通家庭"双核没有问题,NUMA 服务器上的大问题。
nanosleep(timespec_with_zero_ns)
(即在Linux/BSD/POSIX/其他任何情况下)确实做到了你的要求,它休眠时间为零,即根本不会。它只是一个无用的上下文切换,会立即返回(我们实际上已经发生过一次这种情况,当您假设它只是像在 Windows 下一样工作时,这令人惊讶)。
http://en.cppreference.com/w/cpp/thread/sleep_for
睡眠时间:'阻止指定sleep_duration的当前线程的执行。可能会阻塞超过 sleep_duration 的时间。
这实际上取决于实现和操作系统。
std::this_thread::yield() 是放弃时间片的标准方法(依赖于非特定实现)。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 从持续时间构造std::chrono::system_clock::time_point
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 使用简单类型列表实现的指数编译时间.为什么
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 在已经使用Git的情况下减少编译时间
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 从文本文件中读取时钟时间和事件时间并进行处理
- 具有未知值时的时间复杂性
- 如何减少花费的时间
- C++在变量给定的指定时间内关闭电脑
- rcpp函数中的清理时间很长
- C++:floor unix时间戳到UTC月份
- 如何在c++中录制具有精确帧时间戳的视频
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- KMP算法和LPS表构造的运行时间
- 放弃当前线程的时间片 C++
- 分支预测变量结果是否在流程使用其时间片后保存