异步与多线程

5 c# asynchronous

我读过这个问题异步与多线程 -谷歌是否存在差异和搜索差异.

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

Yat*_*wal 3

如果您的任务可以使用异步编程来完成,那么最好以这种方式完成,而不是采用多线程编程。有 3 个原因:-

\n\n

1:性能

\n\n

在多线程中,CPU 或 w/e 必须不断在线程之间切换。因此,即使你的线程什么都不做,只是坐在那里(或者更有可能的是,进行比较以查看条件是否为真,以便它可以根据创建它的目的进行操作),CPU 仍然会切换线程和进程需要一些时间。我不认为这会很糟糕,但你的表现肯定会受到影响。

\n\n

2:简单和简洁

\n\n

另外,也许只有我这么认为,但异步编程对我来说似乎更自然。在你问之前,不,我不是 JS 的粉丝,但仍然是。不仅如此,您还会遇到共享变量和线程安全性以及其他 \xe2\x80\x94 问题,所有这些问题都可以通过使用异步编程和回调来回避。

\n\n

3:烦人的线程实现

\n\n

在 Python 中,有一个非常可怕的东西,叫做 GIL(全局解释器锁)。基本上,Python 不允许您实际运行并发线程。另外,如果您正在考虑在多核 CPU 上运行线程程序,那就算了。

\n\n

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

\n\n
\n\n

话虽如此,异步和多线程确实没有那么可比。虽然多线程可以用来(低效地)实现异步性,但它是一种获得并发性的方法,并且异步性是一种编程风格,就像 OOP(面向对象编程)一样。

\n