gpt4 book ai didi

c++ - fork() 的神秘 pthread 问题

转载 作者:太空狗 更新时间:2023-10-29 23:10:16 25 4
gpt4 key购买 nike

我有一个程序:

  • 有一个启动服务器线程 (2) 和另一个 (4) 的主线程 (1)。
  • 服务器线程 (2) 执行 accept(),然后创建一个新线程 (3) 来处理连接。

在某些时候,线程 (4) 执行 fork/exec 以运行另一个程序,该程序应连接到线程 (2) 正在监听的套接字。有时这会失败或花费不合理的长时间,而且诊断起来非常困难。如果我对系统进行 strace,看起来 fork/exec 已经工作,接受已经发生,新线程 (4) 已经创建 .. 但该线程没有任何反应(使用 strace -ff,相关 pid 的文件是空白)。

有什么想法吗?

最佳答案

我得出结论,大概是这个现象:

http://kerneltrap.org/mailarchive/linux-kernel/2008/8/15/2950234/thread

因为这个错误很难在我们的开发系统上触发,但通常是由在大型共享机器上运行的用户报告的; fork 的应用程序也会启动一个 JVM,它本身会分配很多线程。该问题还与正在加载的机器和大量内存使用有关(我们有一台 RAM 为 128Gb 的机器,进程的大小可能为 10-100G)。

我一直在阅读 O'Reilly pthreads 一书,其中解释了 pthread_atfork(),并建议使用在启动时从运行子进程的主进程派生的“代理父”进程。它还建议使用预先创建的线程池。这两个想法似乎都是不错的主意,因此我将至少实现其中一个。

关于c++ - fork() 的神秘 pthread 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1411505/

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