- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我了解到您通常应该坚持使用 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/
我是一名优秀的程序员,十分优秀!