【问题标题】:Asynchronous vs Multithreading [closed]异步与多线程[关闭]
【发布时间】:2013-03-17 10:46:36
【问题描述】:

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

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

【问题讨论】:

  • 它们不是竞争选项,更好的问题可能是“何时使用哪个”,但无论哪种方式,这对 SO 来说都不是一个好问题。
  • “异步而不是多线程?”具有误导性,因为实现异步[以及并行]的常用方法是使用多线程。让我再给你一个词来调查:并发。
  • @Theraot 你可以编辑我的问题\
  • @Shahrooz Jefri 是的,我可以。而我选择不这样做。我认为这个问题不应该在这里,在我看来它太宽泛了,可以讨论并且具有误导性。我仍然认识到信息的需要,所以我不会标记或投反对票。相反,我会在它关闭之前尝试提供帮助。我向您推荐 Robert Pike 的“并发不是并行”演讲,地址为:vimeo.com/49718712

标签: c# asynchronous


【解决方案1】:

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

1:性能

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

2:简单明了

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

3:烦人的线程实现

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

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


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 2021-12-14
    • 2015-02-06
    • 1970-01-01
    • 2011-11-13
    相关资源
    最近更新 更多