进程和线程?
富柯斯一面
基本点
- 定义
- 进程:进程是操作系统中一个正在运行的程序,每个进程都有自己的地址空间、内存、文件描述符等资源
- 线程:进程中的一个执行单元,是 CPU 调度的最小单元,共享进程的资源,但有自己的独立执行流
- 区别
- 进程:进程拥有独立的堆栈空间和数据段,需要分配独立的地址空间,开销大
- 线程:开销小,切换快,没进程安全,从通信机制上看,线程可以共享数据段
- 举例:
- 浏览器中一个 Tab 就是一个进程,进程中某个线程崩了,整个进程就会崩,但是这不会影响其他的进程,因此进程之间相对独立
- Nginx 或 Nodejs PM2 开启的多个 instance 是进程,每个 instance 之间不能共享内存数据
- JS 中 WebWorker 是一个线程,它可以和和主线程共享内存数据,独立运行不阻塞 UI