首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分叉后螺纹安全吗?

分叉后螺纹安全吗?
EN

Stack Overflow用户
提问于 2010-09-16 10:26:26
回答 2查看 480关注 0票数 9

我已经了解到,您通常应该坚持分叉或线程,以避免遇到非常奇怪和非常困难的调试问题,所以,直到现在,我总是这样做。我的问题是,当我只做分叉的时候,创建了许多短暂的进程来分配大量的工作,以获得更多的CPU内核,从而获得更高的成本,直到在某一时刻性能不再合理地扩展。同时,只使用线程时,我必须非常小心地使用哪些库,并且在线程安全性方面通常是非常防御性的,这占用了大量宝贵的开发时间,并且强制放弃了一些喜爱的库。所以,尽管有人警告我,把叉和线程混在一起的想法在很多方面确实吸引了我。

现在,根据我到目前为止所读到的,当分叉发生时已经创建了线程时,似乎总是会出现问题。

考虑到我设计了一个系统,它可以启动、去守护、分叉它的主要层,并且在我完全安全和健壮之后再也不做任何分叉了。如果中的一些预分叉层现在开始使用,使用线程将它们的工作负载分布在多个CPU核上,那么各个子进程永远不会知道其他子进程的线程,,这仍然是安全的吗?我可以保证每个层本身都是线程安全的,而非线程安全层永远不会启动自己的线程。

虽然我对这种方法感到很安全,但我还是希望能就这个问题提出一些专业意见,指出各种可能的警告、有趣的观点、高级阅读的链接等等。我个人使用的语言是Debian、RedHat、SuSe和OS上的Perl,但这个话题应该足够普遍,可以适用于任何Un* X /BSD上的任何语言--比如远程运行POSIXish的平台,甚至是Interix。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-16 11:57:35

您的方法在POSIX下是很好的,只要您不创建任何在分叉进程之间共享的MAP_SHARED共享内存区域。一旦过程分叉,它们是独立的。

POSIX documentation on fork()

票数 4
EN

Stack Overflow用户

发布于 2010-09-16 10:29:29

创建了许多短暂的进程来分配大量的工作,使我想要输入的CPU内核越多,成本就越高。

不怎么有意思。

但是,您可以使用消息队列,而不是为每一项工作分叉单个进程。

创建一堆所有从公共队列读取的进程。把他们的工作排到队伍里去。别再用叉子了。许多由公共队列提供的小任务。

和。没有线程安全问题。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3725744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档