以下是一些常见的异步技术及其底层机制:
基于事件循环
- 机制:通过事件驱动模型(如观察者模式)管理任务,任务会被挂起并在有事件通知时重新调度。
- 特点:通常在单线程中执行,避免了线程间的切换开销。
- 例子:
- Node.js 的事件循环
- Python 的
asyncio
库
基于回调
- 机制:任务完成后通过回调函数通知执行结果。
- 特点:编程风格可能变得复杂(回调地狱)。
- 例子:早期的 JavaScript 异步编程(如
setTimeout
)。
基于多线程或多进程
- 机制:通过线程或进程处理异步任务,主线程负责调度。
- 特点:适合 CPU 密集型任务,但需要注意线程/进程同步问题。
- 例子:
- Java 的线程池
- Python 的
concurrent.futures
基于协程
- 机制:协程是一种比线程更加轻量级的存在,任务可以显式挂起和恢复。
- 特点:性能开销低,适合 I/O 密集型任务。
- 例子:
- Python 的
async
/await
- Go 的 goroutine
- Python 的