Skip to main content

线程与进程详解

线程和进程是程序运行的基本概念,理解它们对写高效、稳定的代码至关重要。


🧠 什么是进程?

进程是操作系统资源分配的基本单位。每个运行的程序都至少有一个进程。

特点:

  • 拥有独立的内存空间
  • 进程之间不能直接访问彼此内存
  • 切换成本高,隔离性强

🧵 什么是线程?

线程是程序执行的最小单位,是 CPU 调度的基本单位。

特点:

  • 线程共享进程的内存空间
  • 创建和销毁成本低
  • 多线程间需加锁避免资源竞争

📊 对比总结

项目进程线程
地址空间独立共享
创建开销
通信方式消息队列、管道等内存共享、锁
崩溃影响相互独立会影响整个进程
使用场景多程序、隔离任务并发执行任务

🎯 使用场景举例

场景推荐
CPU 密集型任务(加密、图像处理)多进程
IO 密集型任务(爬虫、网络请求)多线程
Web 应用并发请求多线程/协程
前端异步加载单线程 + 异步

🧑‍💻 示例代码

✅ Python 多线程

import threading

def worker():
print("工作线程执行中")

t = threading.Thread(target=worker)
t.start()
t.join()

✅ Python 多进程

from multiprocessing import Process

def worker():
print("多进程任务执行")

p = Process(target=worker)
p.start()
p.join()

✅ Node.js 模拟多任务(async 模式)

async function fetchData() {
const res = await fetch("https://api.example.com");
const data = await res.json();
console.log(data);
}

🧠 线程安全示例(加锁)

import threading

count = 0
lock = threading.Lock()

def add():
global count
with lock:
count += 1

🛠 实战建议

Python 中为什么多进程更适合 CPU 密集型任务?

因为 Python 的 GIL(全局解释器锁)限制了同一时刻只有一个线程在执行 Python 字节码。 所以多线程适合 IO 密集型(如网络请求),而多进程可以并行运行多个 Python 实例。

Node.js 是单线程的吗?

是的,Node.js 使用事件循环机制,在单线程中实现异步非阻塞 IO,但可以通过 worker_threads 实现并发。


📚 推荐阅读