gpt4 book ai didi

c++ - C++线程创建/删除与线程停止/恢复

转载 作者:行者123 更新时间:2023-12-03 07:03:51 25 4
gpt4 key购买 nike

我正在编写仅使用1个线程(主线程除外)的应用程序。线程仅生存50ms之类的短时间。但是,它应该每秒发生多次。除激活时间外,线程应停止,并且主线程应正在运行。

例如50ms thead做某事-> 20ms主做某事-> 50ms线程某事-> 20ms主不做任何事....

我首先认为线程恢复/停止会很好。但是,它比线程创建/销毁更好吗?像线程创建->线程删除->线程创建->线程删除......

当我使用线程创建/销毁策略时,我使用了线程构造函数和thread.join()来完成,并使用了1个原子变量来知道何时完成。

当我使用线程恢复/停止策略时,我使用了conditional_variable,互斥量和condition_variable.wait()。

我期望线程恢复/停止策略具有更好的性能。
但是,它看起来并不像那样。看起来两者的性能和内存/CPU使用率几乎相同。

最佳答案

在OS级别上创建线程通常确实需要相当多的开销。但是创建std::thread对象不一定相同。后一个 Action 可能包括仅从线程池中请求一个线程,以及销毁返回线程的操作,而OS线程本身永不停止存在。

在这种情况下,两种方法之间不会有太大区别,因为(在OS级别上)真正完成的全部工作就是将线程添加到线程调度算法中,并在两种情况下都将其删除(除非池用完了)线程,也需要在操作系统级别上创建新线程)。仍然可能存在的微小差异可能比线程等待CPU内核所需的时间要小,因为在典型的现代OS上,线程数量要比内核多得多,因此您可能不会注意到任何差异。完全没有。

仍然只是暂停恢复线程是可取的。您不依赖线程池来实现同样的性能,并且如果您将代码移植到不使用一个操作系统(或已将其关闭)的某些操作系统,那么您仍然(以某种方式)维护自己的线程池...

关于c++ - C++线程创建/删除与线程停止/恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59527037/

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