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

问题描述 投票:1回答:1

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

例如,50ms thead做某事-> 20ms main做某事-> 50ms线程做某事-> 20ms main做某事....

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

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

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

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

c++ multithreading mutex condition-variable
1个回答
0
投票

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

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

仍然只是暂停恢复线程是可取的。您不会在线程池上rely来获得同样的性能,并且如果将代码移植到不使用某个操作系统(或已将其关闭)的某些操作系统上,那么您仍将(自己)维护自己的一个这样的线程池...

© www.soinside.com 2019 - 2024. All rights reserved.