一、区别

进程是操作系统分配资源的最小单位,线程是程序执行的最小单位
线程是一个进程中代码的不同执行路线
各个线程之间共享程序的内存空间
线程上下文切换比进程上下文切换要快得多

多线程是指程序中包含多个执行流

二、浏览器内核

Chrome浏览器使用多个进程来隔离不同的网页。因此在Chrome中打开一个网页相当于起了一个进程

通过取得页面内容、整理信息(应用CSS)、计算和组合最终输出可视化的图像结果,通常也被称为渲染引擎
每个tab网页都有由其独立的渲染引擎实例

内核是多线程,在内核控制下各线程相互配合以保持同步

GUI 渲染线程
JavaScript引擎线程
定时触发器线程
事件触发线程
异步http请求线程

1. GUI渲染线程

渲染浏览器界面HTML元素
在Javascript引擎运行脚本期间,GUI渲染线程都是处于挂起状态

2. JavaScript引擎线程

V8引擎
为了避免因为引入了锁而带来更大的复杂性,Javascript在最初就选择了单线程执行。
为了防止渲染出现不可预期的结果,浏览器设置GUI渲染线程与JavaScript引擎为互斥的关系

3. 定时触发器线程

4. 事件触发线程

排队处理

5. 异步http请求线程

在XMLHttpRequest在连接后是通过浏览器新开一个线程请求

三、node

1. node优点

  • 便利,请求可以共享内存变量;
  • 高性能:
    • 避免频繁创建、切换进程的开销;
    • 占用资源小
  • 安全性:不用担心同一变量同时被多个线程进行读写,解放了开发人员

2. 多线程、多进程、多核

问题出现:如何防止阻塞?如何高效利用多核?如何应对大量计算量

  • tagg2模块解决多线程+node10+版本有解决方案
  • require(‘cluster’).fork()利用多核处理;
  • require(‘child_process’).fork,利用多进程方案处理;优化可以利用require('child_process').spawn; node -e "console.log('hello world')"

3. 并发异步线程

  • 高并发,是指在同一时间并发访问服务器
  • Node.js通过事件循环来挨个抽取事件队列中的一个个 Task 执行, 从而避免了传统的多线程情况下 2个队列对应 1个咖啡机 的时候上下文切换以及资源争抢/同步的问题, 所以获得了高并发的成就.

4. 一些知识

  • 什么时候应该在后台进程中使用消息服务
    下单成功后,发送邮件通知,就是个典型的可以用消息队列来解耦的服务
  • 底层i/o多线程

四、参考资料

浏览器进程?线程?傻傻分不清楚!
Node.js的线程和进程详解

Node.js 10.5.0新特性-多线程

进程与线程的一个简单解释