ruby中的叉子和线程

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

解决方法

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

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

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

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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...