利用多核CPU
在NodeJs中是以多进程的方式在工作,可充分利用服务器的多核CPU,多核CPU可以并行执行,提供程序的进程
单核CPU和多核CPU的区别
NodeJs的主要任务是作为Web服务,海量请求过多时会造成阻塞 ,出现访问慢,打开失败的情况
- 多进程是利用多核CPU能并行执行的优点来提高整个服务程序的性能的,一个CPU核在同一时刻只能做一件事情,所以不是进程越多越好。
多个任务分别在不同的进程里执行就不发生相互阻塞可以并行执行,任务就会立即执行然后得到结果。
守护进程
守护进程是多进程的另一个作用,来保证整个服务的健壮和稳定
在实际的生产环境的Web服务器都是以多进程方式的,目的除了可以提高处理请求的并发能力,另外就是可以管理web服务进程,当出现异常时,程序可以发现并重启新的web服务进程来继续服务,保障服务的健壮和稳定。
守护进程因为是负责创建和管理工作进程的,所以不要实际处理请求,要保证尽量不出现异常,如果守护进程都出现异常了就只能人工重启服务或通过第3方程序来定时发现并重启了。
创建子进程
spawn和exec方法是以异步方式来创建子进程的,它们也有对应同步的方法,一般很少用到。
- exec是spawn方法的延伸应用,底层是spawn方法来实现的,spawn方法是最灵活强大的。
spawn方法创建的子进程,默认是可以通过管道流把数据在父子进程间传递,spawn方法可以通过创建时配置属性来改变标准io流
创建Node.js子进程
fork方法专门创建node.js的子进程
fork用于创建Node子进程,但不是说只有fork方法可以创建哦,spawn方法也可以的。
- 创建Node子进程执行任务是不会阻塞父进程的,可以与父进程并行执行。
- 进行执行完后触发exit事件,它表示进程结束并退出了。
多进程来分别执行任务一大优势就是可以并行执行,所以所耗的时间肯定不一样啦,多进程肯定快一点。
进程间传递消息
fork创建Node子进程是默认采用IPC与父进程通信的。
- IPC实际传递的是字符串,所以传递对象时会进行序列化,不可序列化的对象是无法传递的。
- IPC是全双工通信的,即一端即可接收消息也可以发送消息。
- Nodejs已经提供了非常方便的API进行消息传递,send方法用于发送消息,message事件接收消息。
子进程做复杂计算
创建集群
- 多个进程进程创建的server是无法监听同一端口的,只有一个server监听成功,其它会报端口被占用
- 要实现监听同一端口,需要把主进程的server句柄传递给工作进程,实际传递的是句柄对应的文件描述符,在工作进程里再创建一个server,这个server监听到这个文件描述符,这样看起来是共用了一个server,实现了监听同一端口。