nodejs进程通信集群进程管理

一.进程定义:

(1)启动一个程序的时候,操作系统会为该程序创建一块内存,用来存放代码、运行中的数据和一个执行任务的主线程,我们把这样的一个运行环境叫进程。(2)Node.js中的进程Process是一个全局对象,无需require直接使用,给我们提供了当前进程中的相关信息。

二.进程process和线程thread的关系:

1.根本区别:

(1)进程,是操作系统资源分配的基本单位,线程不拥有系统资源,但可以访问隶属于进程的资源,同一进程的所有线程共享该进程的所有资源。资源包括:内存,cpu,IO;(2)线程,是处理器CPU任务调度和执行的基本单位;

2.资源开销:

(1)每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;进程间通信需要各种通信方式;(2)线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。线程通信因为共享一块内存,只要保证指针一致就行;

3.包含关系:

(1)线程是进程的一部分,一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程(主线程)。(2)nodejs大部分情况下一个进程里面是一个线程,单线程;

4.内存分配:

(1)同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的(2)当一个进程关闭之后,操作系统会回收进程所占用的内存。即使其中任意线程因为操作不当导致内存泄漏,都会被正常回收的;

5.影响关系:

(1)因为进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响(2)而线程之间没有单独的地址空间,一个线程死掉(崩溃)就等于整个进程死掉,所以多进程要比多线程健壮。

三.补充下协程coroutines相关知识

1.什么是协程

协程运行在线程之上,当一个协程执行完成后,可以选择主动让出,让另一个协程运行在当前线程之上。协程并没有增加线程数量,只是在线程的基础之上通过分时复用的方式运行多个协程而且协程的切换在用户态完成,切换的代价比线程从用户态到内核态的代价小很多。

2.协程的适用场景和注意事项

(1)在有大量IO操作业务的情况下,采用协程替换线程,可以到达很好的效果,一是降低了系统内存,二是减少了系统切换开销,因此系统的性能也会提升。(2)在协程中尽量不要调用阻塞IO的方法,比如打印,读取文件,Socket接口等,除非改为异步调用的方式;(3)协程只有在IO密集型的任务中,配合异步IO才能发挥最大威力

四.进程间如何进行通信

(1)通过stdin/stdout传递json

最直接的方式,适用于能够拿到“子”进程handle句柄的场景,适用于关联进程之间通信,缺点:无法跨机器;

(2)IPC通信:

最native(地道)的方式,比上一种“正规”一些;缺点:具有同样的局限性,无法跨机器;

(3)通过sockets:

最通用的方式,有良好的跨环境能力缺点:存在网络的性能损耗;

(4)借助messagequeue:

最强大的方式,既然要通信,场景还复杂,不妨扩展出一层消息中间件,漂亮地解决各种通信问题;

(5)Redis

基本思路与messagequeue类似Redis自带Pub/Sub机制(即发布-订阅模式),适用于简单的通信场景,比如一对一或一对多并且不


转载请注明:http://www.aierlanlan.com/rzfs/1642.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了