gpt4 book ai didi

linux - fork 后线程安全吗?

转载 作者:IT王子 更新时间:2023-10-29 00:12:17 29 4
gpt4 key购买 nike

我了解到您通常应该坚持使用 fork 或线程以避免遇到非常奇怪且极难调试的问题,所以直到现在我一直都是这样做的。我的问题是,当我坚持只 fork 时,创建 许多 短暂的进程来分配工作 block ,以便随着我想要提供的 CPU 内核越多而变得更加昂贵,直到某些点的性能不再合理扩展。同时,仅使用线程时,我必须非常小心使用哪些库,并且通常在线程安全方面极度防御,这会占用大量宝贵的开发时间并强制放弃一些最喜欢的库。因此,即使我被警告​​过,混合 fork 和线程的想法在很多层面上确实对我有吸引力。

现在,从我目前所读的内容来看,当 fork 发生时已经创建了线程时,问题似乎总是会出现。

鉴于我设计了一个系统,该系统可以启动、守护进程、 fork 其主要层,并且在我完全安全和健壮之后再也不会进行任何 fork 。 如果那些pre-forked tiers中的一些现在开始使用线程将它们的工作负载分配到许多 CPU 内核上,这样各个子进程永远不知道其他 child 的想法,那会安全吗?我可以保证每一层本身都是线程安全的,非线程安全层永远不会启动它们自己的线程。

虽然我觉得对这种方法很安全,但我很感激一些关于此事的专业意见,指出各种可能的警告、有趣的观点、高级阅读的链接等。我个人使用的语言是 Debian、RedHat、SuSe 和 OS X 上的 Perl,但是主题应该足够通用以适用于任何类似 Un*x/BSD 的平台上的任何语言远程 POSIXish 行为,甚至可能是 Interix。

最佳答案

creating many short-lived processes to distribute chunks of work to gets the more expensive with the more CPU cores I want to feed

不是真的。

但是,您可以使用消息队列而不是为每项工作 fork 单独的进程。

创建一堆从公共(public)队列读取的进程。将他们的工作放入队列中。不再 fork 。许多小任务来自一个公共(public)队列。

还有。没有线程安全问题。

关于linux - fork 后线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3725744/

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