C# 异步与多线程

C# 异步与多线程,c#,asynchronous,C#,Asynchronous,我阅读了这个问题,并在谷歌上搜索关于差异的信息 使用异步而不是多线程有什么好处? 当使用异步而不是多线程时?如果您的任务可以使用异步编程来完成,那么最好使用异步编程来完成,而不是使用多线程编程。原因有三: 1:表现 在多线程中,CPU或w/e必须在线程之间保持切换。因此,即使您的线程什么也不做,只是坐在那里(或者更可能的情况是,通过比较来确定某个条件是否为真,这样它就可以通过创建它的w/e来获得一个条件),CPU仍然会切换线程,并且该过程需要一些时间。我不认为那会很糟糕,但你的表现肯定会受到打击

我阅读了这个问题,并在谷歌上搜索关于差异的信息


使用异步而不是多线程有什么好处?
当使用异步而不是多线程时?

如果您的任务可以使用异步编程来完成,那么最好使用异步编程来完成,而不是使用多线程编程。原因有三:

1:表现 在多线程中,CPU或w/e必须在线程之间保持切换。因此,即使您的线程什么也不做,只是坐在那里(或者更可能的情况是,通过比较来确定某个条件是否为真,这样它就可以通过创建它的w/e来获得一个条件),CPU仍然会切换线程,并且该过程需要一些时间。我不认为那会很糟糕,但你的表现肯定会受到打击

2:简单和简洁 而且,也许只有我一个人,但异步编程对我来说似乎更自然。在你问之前,不,我不是JS的粉丝,但我还是。不仅如此,您还会遇到共享变量、线程安全性和其他方面的问题——所有这些都可以通过使用异步编程和回调来避免

3:线程的恼人实现 在Python中有一个非常可怕的东西叫做GIL(全局解释器锁)。基本上,Python不允许您实际运行并发线程。此外,如果您正在考虑在多核CPU上运行线程程序,那么请忘记它

我不知道C#中可能也有警告。这些只是我的2美分



综上所述,异步和多线程确实没有那么好的可比性。虽然可以使用多线程(效率低下)来实现异步,但它是一种获得并发性的方法,而异步性是一种编程风格,就像OOP(面向对象编程)一样。

它们不是相互竞争的选项,更好的问题可能是“何时使用哪个”,但无论哪种方式,这都不是一个好问题。“异步而非多线程”是一种误导,因为实现异步性[以及并行性]的常用方法是用多线程。让我给你另一个词来研究:并发。@你可以编辑我的问题。@ SaHrooz Jeffi是的,我可以。我选择不这样做。我认为这个问题不应该在这里,我认为它太宽泛,开放讨论,误导。我仍然认识到信息的需要,所以我不会标记或否决。相反,我会在它关闭之前尝试提供帮助。我建议您阅读Robert Pike的“并发性不是并行性”演讲,网址为:。