我有一个程序应该运行几周,并且它不断且频繁地生成线程。然而,每时每刻同时运行的线程不超过 10-15 个。我是否可以用完线程并在某个时候出现一些 UB/错误?根据记录,线程生成的频率约为 1 线程/秒及以上。
这个问题源于我今天遇到的一件奇怪的事情。我有一个 Python 脚本,可以运行 C++ 中的其他程序:
def f():
p = subprocess.Popen(cmd)
while True:
if p.poll() is not None:
exit(0)
time.sleep(1)
def g():
run_bot_thread = self.create_and_start_thread(f)
run_bot_thread.join()
while True:
g()
print('Sleep')
time.sleep(1 * 60 * 60)
通常,如果
cmd
部分发生一些错误,脚本就会退出,但现在看起来好像在同一时刻进程结束,线程也崩溃并立即加入,所以我在屏幕上收到令人惊讶的“睡眠”消息。
线程创建的理论限制
操作系统限制:操作系统和系统的资源可用性通常会对进程可以创建的线程数设置最大限制。既然您说同时运行的线程不超过 10 到 15 个,那么这个限制通常足够高,以至于在正常情况下您不太可能达到它。
资源可用性:内存是每个线程使用的系统资源之一。如果您的系统内存(或其他重要资源)不足,尝试创建新线程可能会失败。但是,除非每个线程消耗大量资源,否则这不应该成为问题,因为您的程序将并发线程数保持在相当低且稳定的水平。