首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是真正的异步计算?

什么是真正的异步计算?
EN

Stack Overflow用户
提问于 2015-11-05 07:33:12
回答 3查看 3K关注 0票数 1

我一直在阅读(和工作)大量的multi-threaded applicationsIO,我发现asynchronous这个术语已经成为许多模糊想法的一部分。我想知道我是否正确地理解了它。在我看来,“异步性”有两个主要分支。

  1. 异步I/O,如网络读写。这可以归结为多个CPU之间高效的并行处理,比如主CPU和NIC CPU。这样做的目的是让多个处理器并行运行,交换数据,而不阻止对方完成并返回其作业的结果。
  2. 通过尽量减少线程的使用来最小化上下文切换惩罚。这似乎是.NET框架在其异步/等待特性中所关注的内容。与其生成/关闭/阻塞线程,不如将并行作业分解为任务,并使用软件任务调度程序尽可能保持线程池的忙碌,而不必求助于生成新线程。

这些似乎是两个完全独立的概念,没有任何相似之处可以将它们联系在一起,但它们都被同一个“异步计算”词汇表所引用。

我对这一切的理解正确吗?

EN

回答 3

Stack Overflow用户

发布于 2015-11-05 07:39:27

异步基本上意味着不阻塞,即不必等待操作完成。

线程只是实现这一目标的一种方法。有很多方法可以做到这一点,从硬件层面,所以层,软件层面。

比我更有经验的人可以给出与线程无关的异步性示例。

票数 3
EN

Stack Overflow用户

发布于 2015-11-05 09:00:37

这可以归结为多个CPU之间高效的并行处理,比如主CPU和NIC CPU。想法是让多个处理器并行运行..。

异步编程并不完全是关于多核CPU和并行性的:考虑一下单个核心CPU,只有一个线程创建并发送电子邮件消息。以同步的方式,它将花费几微秒来创建消息,并花费更多的时间通过网络发送消息,然后才创建下一条消息。但是在异步程序中,当前一条消息通过网络发送时,线程可以创建一个新消息。这类程序的一个实现可以是使用.NET异步/等待特性,其中您可以只有一个线程。但是,即使是阻塞IO程序也可以被认为是异步的:如果主线程创建消息并在缓冲区中排队,则另一个线程从哪个线程中提取消息并以阻塞IO的方式发送它们。从主线程的角度来看,它是完全异步的。

.NET异步/等待只是使用已经异步读取/writing文件的OS,通过网络发送/receive数据,它们都是异步的-操作系统不会阻止它们(驱动程序本身是异步的)。

票数 1
EN

Stack Overflow用户

发布于 2015-11-05 14:17:07

异步是一个通用的术语,它没有被广泛接受的含义。不同的领域对它有不同的含义。

例如,异步IO意味着不是阻止IO调用,而是发生其他事情。其他的东西可以是完全不同的东西,但它通常涉及某种类型的调用完成通知。细节可能有所不同。例如,可能会将通知内置到调用本身中--就像MS完全端口(如果内存可用的话)一样。或者,在你打电话之前,可以先确认一下,这样电话就不会阻塞--这就是poll()和朋友们所做的。

异步也可能意味着简单的并行执行。例如,人们可能会说‘数据库是异步更新’,这意味着有一个专门的线程来处理数据库连接,并且该线程不会减缓主处理线程的速度。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33538892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档