我一直在阅读(和工作)大量multi-threaded applications
和IO
,并且我发现asynchronous
这个词已成为多种含糊不清的想法。我想知道我是否理解正确。我认为它的方式是有两个主要分支" asynchronicity"。
这些似乎是两个完全独立的概念,没有相似之处可以将它们联系在一起,但它们都被相同的"异步计算"词汇。
我能正确理解所有这些吗?
答案 0 :(得分:1)
异步基本上意味着不阻塞,即不必等待操作完成。
线程只是实现这一目标的一种方式。从硬件级别,SO级别,软件级别来看,有很多方法可以做到这一点。
比我更有经验的人可以提供与线程无关的异步性示例。
答案 1 :(得分:0)
这真正归结为多个CPU之间的高效并行处理,例如主CPU和NIC CPU。我们的想法是让多个处理器并行运行......
异步编程并不是关于多核CPU和并行性的:考虑单核CPU,只有一个线程创建电子邮件并发送它们。以同步方式,它将花费几微秒来创建消息,并且花费更多时间通过网络发送消息,然后只创建下一条消息。但是在异步程序中,线程可以创建新消息,而前一个消息通过网络发送。这种程序的一个实现可以是使用.NET async / await功能,您可以只使用一个线程。但即使是阻塞IO程序也可以被认为是异步的:如果主线程创建消息并将它们排队到缓冲区中,另一个线程将其从中拉出并以阻塞IO方式发送它们。从主线程的角度来看 - 它完全是异步的。
.NET async / await只使用已经异步的操作系统api - 读取/写入文件,通过网络发送/接收数据,无论如何它们都是异步的 - 操作系统不阻塞它们(驱动程序本身是异步)。
答案 2 :(得分:0)
异步是一个通用术语,没有广泛接受的含义。不同的域名具有不同的含义。
例如,异步IO意味着不会阻止IO调用,而是发生其他。其他东西可能是真正不同的东西,但它通常涉及呼叫完成的某种通知。细节可能不同。例如,通知可能内置于调用本身 - 例如在MS Completeion Ports中(如果内存服务)。或者,在您拨打电话之前可以进行验证,以便呼叫无法阻止 - 这就是poll()
和朋友所做的事情。
异步也可能意味着简单的并行执行。例如,有人可能会说'数据库是异步更新的',这意味着有一个处理数据库连接的专用线程,该线程不会减慢主处理线程的速度。