Open vivatoviva opened 5 years ago
创建异步进程
stdout
stderr
创建同步进程
Child_process.exec()和child_process.execFile()之间重要区别可能因平台异。因为在unix类型的操作系统上,child_prcessFile()可以更加高效,因为默认情况下,不会衍生shell,但是在window上,.bat 和 .cmd 文件在没有终端的情况下不能自行执行,因此无法使用child_process.execFile()启动, 在 Windows 上运行时,可以使用带有 shell 选项集的 child_process.spawn()、或使用 child_process.exec() 或通过衍生 cmd.exe 并将 .bat 或 .cmd 文件作为参数传入(也就是 shell 选项和 child_process.exec() 所做的)。 在任何情况下,如果脚本文件名包含空格,则需要加上引号,在window中执行这些命令需要注意
shell
child_process.spawn()
child_process.exec()
cmd.exe
.bat
.cmd
stdin
stdio
stderr::返回子进程的stderr可读流
stdin:返回子进程的可写流
stdio:一个到子进程的管道的稀疏数组,
stdout:一个到子进程的可读流
进程间通信,简写为IPC:指的是两个或两个以上进程(或线程)之间进行数据或者信号交互的技术方案
用于在同一台机器上运行的进程之间的通信。虽然因特网域套接字可用于同一目的,但UNIX域套接字的效率更高。UNIX域套接字仅仅复制数据;它们并不执行协议处理,不需要添加或删除网络报头,无需计算检验和,不要产生顺序号,无需发送确认报文。
类似于套接字的数据流,但消息有自己的结构,它允许多个进程只需要读写消息队列,而不需要直接相互连接。
管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
命名管道可在同一台计算机的不同进程之间或在跨越一个网络的不同计算机的不同进程之间,支持可靠的、单向或双向的数据通信。
允许多个进程访问同一个内存块,该内存块作为一个共享缓冲区,供进程间相互通信。
一般在并发模型中,允许多个程序使用消息队列或者托管通道通信。
类似于标准的文件,内存映射文件映射到RAM,可以直接对内存地址进行更改,而不是更改输出流。
linux中总共定义了64种信号,分为两类:可靠信号与不可靠信号,前32中信号为不可靠信号,后32种为可靠信号
使用kill -l可以查看所有的signal信号
kill -l
内核处理进程收到的signal是在当前进程的上下文,故进程必须是Running状态。当进程唤醒或者调度后获取CPU,则会从内核态转到用户态时检测是否有signal等待处理,处理完,进程会把相应的未决信号从链表中去掉。
处理时机:内核态-> signal信号处理 -> 用户态
下个模块重点探讨下这个问题
文档部分
创建异步进程
stdout
和stderr
传给回调函数创建同步进程
理解部分
1.
stdin
、stdout
和stderr
、stdio
四者关系stderr::返回子进程的stderr可读流
stdin:返回子进程的可写流
stdio:一个到子进程的管道的稀疏数组,
stdout:一个到子进程的可读流
2. 什么是IPC通道
(1) 文件
(2) 信号
(3) 套接字(socket)
(4) Unix域套接字(Unix domain socket)
用于在同一台机器上运行的进程之间的通信。虽然因特网域套接字可用于同一目的,但UNIX域套接字的效率更高。UNIX域套接字仅仅复制数据;它们并不执行协议处理,不需要添加或删除网络报头,无需计算检验和,不要产生顺序号,无需发送确认报文。
(5) 消息队列(message queue)
类似于套接字的数据流,但消息有自己的结构,它允许多个进程只需要读写消息队列,而不需要直接相互连接。
(6) 管道(pipe)
管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
(7)命名管道(Named pip或FIFO)
命名管道可在同一台计算机的不同进程之间或在跨越一个网络的不同计算机的不同进程之间,支持可靠的、单向或双向的数据通信。
(8) 共享内存(Shared memory)
允许多个进程访问同一个内存块,该内存块作为一个共享缓冲区,供进程间相互通信。
(9) 消息传递(Message passing)
一般在并发模型中,允许多个程序使用消息队列或者托管通道通信。
(10) 内存映射文件
类似于标准的文件,内存映射文件映射到RAM,可以直接对内存地址进行更改,而不是更改输出流。
3. 信号signal种类
(3.1) 信号种类
linux中总共定义了64种信号,分为两类:可靠信号与不可靠信号,前32中信号为不可靠信号,后32种为可靠信号
使用
kill -l
可以查看所有的signal信号(3.2) 信号产生
(3.3) 信号处理
内核处理进程收到的signal是在当前进程的上下文,故进程必须是Running状态。当进程唤醒或者调度后获取CPU,则会从内核态转到用户态时检测是否有signal等待处理,处理完,进程会把相应的未决信号从链表中去掉。
处理时机:内核态-> signal信号处理 -> 用户态
4. 如何实现多进程之间的,cluster底层实现?
下个模块重点探讨下这个问题
参考