Node.js单线程,在处理http请求时一个错误会导致整个进程的退出,这是灾难性的。
多进程和多线程介绍
进程是资源分配的最小单位,线程是CPU调度的最小单位。
进程——资源分配的最小单,线程——程序执行的最小单位
线程是进程的一个执行流,是CPU调度和分配的基本单位,它是比进程更小的能独立运行的基本单位,一个进程由几个线程组成线程与同属于一个线程的其他的线程共享进程所拥有的全部资源。
进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其他进程产生影响,而进程只是一个进程中的不同执行路径,线程又自己的对战和局部变量。单线程没有单独的地址空间,一个线程死掉就等于整个进程死掉。
- 谷歌浏览器
1.一个tab就是一个线程
2.一个tab又有多个线程组成,渲染线程,js执行线程,垃圾回收,serveie wordker 等等 - Node服务
1.进程:监听某一个端口的http服务
2.线程:http服务由多个线程组成,比如
- 主线程: 获取代码,编译执行。
- 编译线程: 记录哪些方法耗时,为优化提供支持。
- profiler线程: 记录哪些方法耗时,为优化提供支持。
- 其他啊线程,用于垃圾回收清理工作,因为是多个线程,所以可以并行清除。
多进程和多线程之间的选择
- 需要频繁创建和销毁的优先使用线程。
这种原则最常见的应用就是web服务器了,来一个连接见一个线程,断了就销毁线程。 - 需要进行大量计算的优先使用线程。
所谓大量计算,就是要耗费很多cpu,切换频繁了,这种情况下线程是最合适的。 - 强相关的处理线程,弱相关处理用进程。
- 可能要拓展到多机分布的用进程,多核分布的线程
- 都满足需求的情况下,用最熟悉最拿手的方式。