c# - 异步与多线程

标签 c# asynchronous

<分区>

我读了这个问题 Asynchronous vs Multithreading- is there a difference并在 Google 中搜索差异。

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

最佳答案

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

1:性能

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

2:简洁明了

另外,也许只有我一个人觉得异步编程对我来说似乎更自然。在你问之前,不,我不是 JS 的粉丝,但仍然是。不仅如此,您还会遇到共享变量和线程安全等方面的问题——所有这些问题都可以通过使用异步编程和回调来回避。

3:烦人的线程实现

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

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


话虽这么说,异步和多线程真的没那么可比。虽然可以使用多线程(效率低下)来实现异步,但它是获得并发的一种方式,而异步是一种编程风格,例如 OOP(面向对象编程)。

关于c# - 异步与多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15459887/

相关文章:

c# - 在 C# 中包私有(private)?

javascript - 复杂的异步流程未能按预期执行

javascript - 在websocket中,如何防止缓慢的异步响应数据错误修改

javascript - 渲染组件后 API 调用返回图像

javascript - 使用 Ajax 的 JavaScript 代码中的评估顺序?

c# - 如何使用 XmlSerializer 反序列化大型文档中的节点

c# - 在哪里可以找到有关全局 .net 开发人员的统计数据

c# - 使用 Microsoft.Build 命名空间从 Visual Studio .sln 文件获取项目列表

c# - 如何在枚举中获取枚举值的 int

c# - 异步编程问题