我已阅读此问题Asynchronous vs Multithreading- is there a difference并在Google中搜索差异。
使用异步而不是多线程有什么好处? 什么时候使用异步而不是多线程?
答案 0 :(得分:3)
如果您的任务可以使用异步编程完成,那么最好是这样做而不是进行多线程编程。有三个原因: -
在多线程中,CPU或w / e必须在线程之间保持切换。所以,即使你的线程什么都不做而只是坐在那里(或者更可能的是,进行比较以查看某个条件是否为真所以它可以得到一个用w / e来创建它),CPU仍然会切换线程和进程需要一些时间。我认为这不会很糟糕,但你的表现肯定会受到打击。
另外,也许只是我,但异步编程对我来说似乎更自然。在你问之前,不,我不是JS的粉丝,但仍然。不仅如此,您还遇到了共享变量和线程安全性等问题 - 所有这些问题都可以通过使用异步编程和回调来解决问题。
在Python中,有一个非常可怕的东西叫做GIL(全球翻译锁)。基本上,Python不允许您实际运行并发线程。另外,如果您正考虑在多核CPU上运行线程程序,请忘掉它。
C#也可能有警告,我不知道。这些只是我的2美分......
所有这一切,异步和多线程真的不具有可比性。虽然可以使用多线程(低效率)来实现异步,但它是一种获得并发性的方法,而acynhrounousity是一种编程风格,如OOP(面向对象编程)。