Skip to content

NodeJS-process/cluster #132

Open
Open
@yaofly2012

Description

@yaofly2012

目录

  1. process模块
  2. 进程 & child_process模块
  3. cluster模块

二、扫盲:进程和线程

  1. 进程和线程都是操作系统的概念;
  2. 进程和线程都是一个时间段的描述,是CPU工作时间段的描述;

两个层次的时间段。

  1. 理解进程和线程的引入背景很重要,看参考知乎:线程和进程的区别是什么?:
  • CPU执行任务只能串行
    但这不是问题,因为CPU非常快,也存在多核
  • 程序的执行上下文
    除了CPU外,其他依赖的资源(比如显卡,GPS等)

2.1 进程

  1. 进程是资源(程序执行上下文)分配的最小单位;
  2. 每个进程都拥有自己的独立空间地址、数据栈,一个进程无法访问另外一个进程里定义的变量、数据结构;
  3. 线程创建、线程之间上下文切换会产生资源开销;

2.1.1 fork子进程

1. 通过fork方式创建的新进程被称为子进程。

fork之后,操作系统会复制一个与父进程完全相同的子进程,虽说是父子关系,但是在操作系统看来,他们更像兄弟关系,这2个进程共享代码空间,但是数据空间是互相独立的,子进程数据空间中的内容是父进程的完整拷贝,指令指针也完全相同,子进程拥有父进程当前运行到的位置(两进程的程序计数器pc值相同,也就是说,子进程是从fork返回处开始执行的)

  • 子进程是从fork返回处开始执行的
    但后续的执行进度就不同步了。

2. fork的含义

可以这样想象,2个进程一直同时运行,而且步调一致,在fork之后,他们分别作不同的工作,也就是分岔了。这也是fork为什么叫fork的原因。

其实前半句是“想象的”,fork之前是一个进程在运行(被想象成两个同步的进程)。本质是一个进程在fork处复制自己创建一个新进程执行其他任务。

2.1.2 多进程通讯

IPC ?

2.3 线程

  1. 线程是操作系统能够进行运算调度的最小单位;
  • 只涉及CPU运算了,其他资源共享进程的。
  • 看上面的论述吧:进程和线程都是一个时间段的描述,是CPU工作时间段的描述

参考

  1. 知乎:线程和进程的区别是什么?
  2. 进程间通信的方式——信号、管道、消息队列、共享内存
  3. 程序计数器 PC

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions