我一直在阅读这篇非常好的文章中的线程编程模型与异步模型。 http://krondo.com/blog/?p=1209
但是,文章提到了以下几点。
- 只要有 I/O,异步程序就会在任务之间进行切换,从而比同步程序表现更好。
- 线程由操作系统管理。
我记得读过,操作系统通过在就绪队列和等待队列(以及其他队列)之间移动 TCB 来管理线程。在这种情况下,线程也不会浪费时间等待,不是吗?
综上所述,异步程序相对于线程程序有哪些优势?
请您参考如下方法:
- 编写线程安全的代码非常困难。使用异步代码,您可以准确地知道代码将从一个任务转移到下一个任务的位置,因此竞争条件更难获得。
- 线程消耗大量数据,因为每个线程都需要有自己的堆栈。使用异步代码,所有代码共享相同的堆栈,并且由于在任务之间不断展开堆栈,因此堆栈保持较小。
- 线程是操作系统结构,因此是平台支持的更多内存。异步任务就不存在这个问题。
2022 年更新:
许多语言现在支持无堆栈协同例程(异步/等待)。这允许我们几乎同步地编写一个任务,同时在设定的位置( sleep 或等待网络或其他线程)让出其他任务(await
ing)