微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby中的叉子和线程

我在一台带有两个处理器的机器上运行一个程序,当我做一个fork时,将子项创建为本机线程,或者它就像一个绿色线程/协同程序.孩子与父母同时运行还是只是平行?

解决方法

fork()的工作原理通常是生成一个新的独立进程,复制页表,并在该进程中将调用fork()的进程所拥有的所有页面标记copy-on-write.然后,fork()在两个进程中返回(返回值让相应的进程知道它是哪一个).

在具有多个处理器(或处理器核心)的系统上,您通常可以(假设您确实拥有支持SMP的系统,cpu亲和力并不会阻止它)期望这两个进程使用两个处理器,但您并不严格保证.

线程在某些系统(例如Linux)上以相同的方式生成,除了第一个进程拥有的页面没有标记copy-on-write,而是之后由两个进程拥有(它们使用相同的页表) .在其他系统上,线程可以以不同方式实现,例如,在用户土地上,在这种情况下,你不会受益于带有线程的多个cpu.

作为旁注,使用fork()和运行2个进程而不是线程的缺点是进程不共享公共地址空间,这意味着必须在上下文切换上刷新TLB.

原文地址:https://www.jb51.cc/ruby/270116.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐