C++ 线程创建/删除与线程停止/恢复
c++ thread create/delete vs thread stop/resume
我正在编写仅使用 1 个线程的应用程序(主线程除外(。 线程的寿命很短,例如 50 毫秒。 但是,它应该每秒发生多次。 除了激活时间之外,线程应该停止,主线程应该正在运行。
例如,50ms thead 做某事 -> 20ms 主要做某事 ->50ms 线程某事 -> 20ms 主要什么都不做....
我首先认为线程恢复/停止会很好。 但是,它比线程创建/销毁更好吗? 像
线程创建 ->线程删除 ->线程创建 ->线程删除...... 当我使用线程创建/销毁策略时,我使用线程构造函数和 thread.join(( 来完成,并使用 1 个原子变量来知道何时完成。
当我使用线程恢复/停止策略时,我使用了conditional_variable,互斥体和condition_variable.wait((。
我预计线程恢复/停止策略具有更好的性能。 但是,它看起来不像那样。 看起来两者的性能和内存/CPU 使用率几乎相同。
在操作系统级别创建线程通常确实需要相当多的开销。但是创建一个 std::thread 对象不一定相同。后一种操作可能包括仅从线程池请求线程,并销毁将线程返回,而操作系统线程本身永远不会停止存在。
在这种情况下,您不会看到这两种方法之间的太大区别,因为真正完成的所有工作(在操作系统级别(都是将线程添加到线程调度算法中,并在这两种情况下将其删除(除非池用完线程并且也需要在操作系统级别创建新线程(。仍然存在的微小差异可能小于线程必须等待 CPU 内核的时间,因为在典型的现代操作系统上,您的线程比内核多得多,因此您可能根本无法注意到任何差异。
仍然只是暂停恢复线程是可取的。您不依赖于线程池来获得相同的性能,并且如果您将代码移植到某些不使用线程池(或已关闭(的操作系统,那么您仍然(有点(以这种方式维护自己的线程池......
- 从不同线程使用int64的不同字节安全吗
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在C++中使用cURL和多线程
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在cuda线程之间共享大量常量数据
- 从不同进程中的另一个线程挂起/恢复线程或进程
- C++ 线程创建/删除与线程停止/恢复
- 实现在多线程代码中安全恢复的断点
- 如何在C++中挂起和恢复 POSIX 线程?
- 我可以在使用 omp_set_num_threads 后使 OpenMP 恢复到理想的线程 # 吗?
- 暂停和恢复多线程环境中另一个线程的线程C++技术建议
- 暂停和恢复线程的最佳解决方案是什么?
- 如何在没有条件变量的情况下阻止线程中的操作,并在Linux中根据信号恢复操作
- 如何阻塞线程并恢复它
- 从另一个线程恢复 asio 协程
- (C++)如何挂起主线程,然后在其中恢复另一个线程
- 创建可挂起/可恢复线程的最佳方法是什么?
- 挂起和恢复一个c++线程中的另一个线程
- 期望可恢复的函数实际上在原始线程中恢复是错误的吗
- 如何在c++中挂起和恢复进程和线程