1、什么是异步?
异步操作通常用于执行完成时间可能较长的任务,如打开大文件、连接远程 计算机或查询数据库。异步操作在主应用程序线程以外的线程中执行。应用程序调用方法异步执行某个 操作时,应用程序可在异步方法执行其任务时继续执行。
2、同步与异步的区别
同步 (Synchronous):在执行某个操作时,应用程序必须等待该操作执行完成后才能继续执行。
异 步(Asynchronous):在执行某个操作时,应用程序可在异步操作执行时继续执行。实质:异步操作, 启动了新的线程,主线程与方法线程并行执行。
3、异步和多线程的区别
我们已经知道,异步的实质是开启了新的线程。它与多线程的区别是什么呢?
简单的说就是:异 步线程是由线程池负责管理,而多线程,我们可以自己控制,当然在多线程中我们也可以使用线程池。
就拿网络扒虫而言,如果使用异步模式去实现,它使用线程池进行管理。异步操作执行时,会将 操作丢给线程池中的某个工作线程来完成。当开始I/O操作的时候,异步会将工作线程还给线程池,这意 味着获取网页的工作不会再占用任何CPU资源了。直到异步完成,即获取网页完毕,异步才会通过回调的 方式通知线程池。可见,异步模式借助于线程池,极大地节约了CPU的资源。
注:DMA(Direct Memory Access)直接内存存取,顾名思义DMA功能就是让设备可以绕过处理器,直接由内存来读取资料 。通过直接内存访问的数据交换几乎可以不损耗CPU的资源。在硬件中,硬盘、网卡、声卡、显卡等都有 直接内存访问功能。异步编程模型就是让我们充分利用硬件的直接内存访问功能来释放CPU的压力。
两者的应用场景:
计算密集型工作,采用多线程。
IO密集型工作,采用异步机制。
4 、异步应用
.NET Framework 的许多方面都支持异步编程功能,这些方面包括:
1)文件 IO、 流 IO、套接字 IO。
2)网络。
3)远程处理信道(HTTP、TCP)和代理。
4)使用 ASP.NET 创 建的 XML Web services。
5)ASP.NET Web 窗体。
6)使用 MessageQueue 类的消息队列。
.NET Framework 为异步操作提供两种设计模式:
1)使用 IAsyncResult 对象的异步操作。