您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

什么时候clone()和fork比pthreads好?

什么时候clone()和fork比pthreads好?

fork(和公司)的优缺点是,他们创建了一个新流程,该流程是现有流程的克隆。

正如您所指出的那样,这是一个弱点,因为创建新流程会产生相当大的开销。这也意味着进程之间的通信必须通过某些“批准的”渠道(管道,套接字,文件,共享内存区域等)进行。

这是一种优势,因为它在父母与孩子之间提供了(更多)更大的隔离。例如,如果子进程崩溃,则可以将其杀死并相当容易地启动另一个子进程。相比之下,如果子线程死了,则最好将其杀死是有问题的- 无法确定该线程专有拥有哪些资源,因此您无法对其进行清理。同样,由于进程中的所有线程共享一个公共地址空间,一个遇到问题的线程可能会覆盖所有其他线程正在使用的数据,因此仅杀死一个线程并不一定足以清理混乱情况。 。

换句话说,使用线程只是一场赌博。只要您的代码是干净的,就可以通过在单个进程中使用多个线程来获得一定的效率。使用多个进程会增加一些开销,但会使您的代码更加健壮,因为它限制了单个问题可能造成的损害,并且如果确实遇到了重大问题,则很容易关闭和替换进程问题。

就具体的例子而言,Apache可能是一个很好的例子。它会在每个进程中使用多个线程,但是要限制发生问题时的损坏(除其他事项外),它会限制每个进程的线程数,并且可以(也可以)同时生成多个独立运行的进程。例如,在一台像样的服务器上,您可能有8个进程,每个进程有8个线程。大量的线程可帮助它在主要是I / O绑定的任务中为大量的客户端提供服务,将其分解为多个进程意味着如果确实出现问题,它不会突然变得完全无响应,并且可以关闭并重新开始一个过程而不会损失很多。

其他 2022/1/1 18:16:43 有595人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶