跳到主要内容

认识

2024年04月09日
柏拉文
越努力,越幸运

一、认识


二、问题


2.1 说一下你对进程和线程的了解?

进程线程 都是操作系统进行资源管理和任务调度的基本单位,但它们在内存隔离、资源占用以及通信方式上存在明显差异。

进程(Process, 每个进程拥有独立的地址空间和资源, 比如内存、文件描述符、环境变量等,这使得一个进程的崩溃不会直接影响其他进程,但进程间通信(IPC)相对复杂,需要借助管道、消息队列、共享内存等机制。由于每个进程拥有完整的资源副本, 创建进程和上下文切换的成本较高, 但这种隔离也提供了更高的安全性和稳定性。

线程(Thread, 线程是轻量级的执行单元, 同一进程内的所有线程共享同一地址空间和资源, 因此线程间通信非常高效, 数据共享简单。但共享资源也带来并发访问问题, 需要谨慎设计同步机制(例如锁、信号量等)。线程创建和切换的成本较低, 因为它们共享进程资源, 适用于高并发场景, 但过多的线程可能导致上下文切换过于频繁, 反而影响性能。

Node.js 是单线程, 在单线程模型下无法充分利用多核 CPU 的问题。Node.js 通过事件循环处理大量 I/O 操作: 对于 CPU 密集型任务,可以使用 child processworker threads 模块实现多核并行处理, 而 Cluster 模块正是基于进程模型实现的,它兼顾了高并发与稳定性。