线程是系统级单位,适合并行处理;协程是用户级单位,适合高并发 I/O 处理。
项目 | 线程(Thread) | 协程(Coroutine) |
---|---|---|
本质 | 操作系统调度的最小执行单元 | 用户态调度的轻量级线程 |
调度者 | 操作系统(内核) | 程序自身(用户空间调度器) |
开销 | 创建/切换较重(需系统调用) | 创建/切换极轻(函数调用级别) |
栈空间 | 每个线程拥有独立栈(如1MB) | 协程一般只占几KB~几十KB |
上下文切换 | 由 OS 执行,涉及寄存器/堆栈切换 | 用户程序中保存/恢复上下文 |
并发性 | 可并行(利用多核) | 单线程并发(并非并行) |
阻塞 | 阻塞会影响整个线程 | 协程可以挂起自己,不影响其他协程 |