认识
2024年04月09日
一、认识
二、问题
2.1 说一下你对进程和线程的了解?
进程 和 线程 都是操作系统进行资源管理和任务调度的基本单位,但它们在内存隔离、资源占用以及通信方式上存在明显差异。
进程(Process
), 每个进程拥有独立的地址空间和资源, 比如内存、文件描述符、环境变量等,这使得一个进程的崩溃不会直接影响其他进程,但进程间通信(IPC
)相对复杂,需要借助管道、消息队列、共享内存等机制。由于每个进程拥有完整的资源副本, 创建进程和上下文切换的成本较高, 但这种隔离也提供了更高的安全性和稳定性。
线程(Thread
), 线程是轻量级的执行单元, 同一进程内的所有线程共享同一地址空间和资源, 因此线程间通信非常高效, 数据共享简单。但共享资源也带来并发访问问题, 需要谨慎设计同步机制(例如锁、信号量等)。线程创建和切换的成本较低, 因为它们共享进程资源, 适用于高并发场景, 但过多的线程可能导致上下文切换过于频繁, 反而影响性能。
Node.js
是单线程, 在单线程模型下无法充分利用多核 CPU
的问题。Node.js
通过事件循环处理大量 I/O
操作: 对于 CPU
密集型任务,可以使用 child process
或 worker threads
模块实现多核并行处理, 而 Cluster
模块正是基于进程模型实现的,它兼顾了高并发与稳定性。