异步方法调用或异步方法模式是(多线程)面向对象程序设计中用于异步调用对象的潜在的长期运行方法的一种设计模式。它等价于提出的模式。
基于事件的异步模式是异步方法调用的一个变种,开销更大但能更好的表现软件组件对象。.NET框架和中的java.util.concurrent.FutureTask类中使用的基于事件的异步模式使用事件来解决同样的问题。
大部分编程语言中对方法的调用是同步执行的。例如在线程执行体内,即线程的调用函数中,方法的调用就是同步执行的。如果方法需要很长的时间来完成,比方说从加载数据的方法,调用者线程将被阻塞直到方法调用完成。如果不希望调用被阻塞,则可以通过创建新的线程并在线程中调用方法,在大多数编程环中上这样做可能需要很长的一段代码,尤其是需要小心处理线程过多的额外开销。异步方法调用它通过使用一种立即返回的异步的变体并提供额外的方法来支持接受完成通知以及完成等待改进长期运行的(同步)方法。
活动对象()设计模式通常使用异步方法调用。异步方法调用的一个替代方案是同步的方法调用和未来对象()模式。
在浏览器的实现上可以采用异步方法调用,例如浏览器需要在页面中的图像加载完成之前将页面显示出来。
I/O操作的异步,有两种理解:
- POSIX标准AIO的异步: “内核主动完成数据拷贝”;与之相对的同步是指应用程序必须主动发起系统调用,调用返回前数据必须全部交到用户内存。即使设置 O_NONBLOCK(非阻塞 IO),只要内核缓冲区有可读数据,read() 依然是同步拷贝:内核缓冲区 → 用户缓冲区,拷贝动作在本次 read 系统调用内同步完成;O_NONBLOCK 只改变「无数据时的行为」,不改变有数据时数据拷贝的同步性质。select/poll更是纯粹的状态通知器,拷贝必须靠用户同步 read。
- 事件通知层面的异步:不必轮询单个fd,把所有fd托管给内核,内核在数据就绪后主动唤醒进程,属于「事件异步通知」。
故有下述划分:
参考来源
参考文献
*
- [https://archive.today/20130102143201/http://articles.techrepublic.com.com/5100-10878_11-1044325.html Using asynchronous method calls in C#]
评论 (0)