进程 线程
进程
运行的代码段+资源 进程和资源是1:1 每个进程都有自己的文件描述符
线程
进程中使用多线程就是让共享同一批资源的操作一起进行。 进程和线程是一个1:n
上下文
线程上下文是进程上下文的子集
协程
个线程内可以由多个这样的特殊函数在运行,但是有一点必须明确的是,一个线程的多个协程的运行是串行的。比如 yield
并发和并行
并发(分片)
并行(多个cpu)
Node 多进程
child_process
exec
子进程执行的是非node程序,传入一串shell命令,执行后结果以回调的形式返回,与execFile\n不同的是exec可以直接执行一串shell命令
execFile
子进程执行的是非node程序,传入一串shell命令,执行后结果以回调的形式返回,与execFile\n不同的是exec可以直接执行一串shell命令。
fork
子进程执行的是node程序,提供一组参数后,执行的结果以流的形式返回,与spawn不同,fork生成的子进程只能执行node应用。
spawn
子进程中执行的是非node程序,提供一组参数后,执行的结果以流的形式返回
多进程通信
基于 socket,基于管道,基于 mmap 内存映射,主要讨论node : 文件描述符、管道。
master 并不是直接把这些数据扔给 worker,而是在 80 端口接收到数据后,生成对应的 socket,再把该 socket 对应的文件描述符通过管道传给 worker,一个 socket 意味着服务端和客户端的一个数据通道,也就意味着 master 把跟客户端的数据通道传给了 worker。
参考
https://naotu.baidu.com/file/12e9857617d241b914648906f2c11cb5
https://mp.weixin.qq.com/s/g3lhEgmTDtMKz7WfAQjIjA
https://github.com/forthealllight/blog/issues/24