同步函数与异步函数
2016-02-19 18:13
211 查看
什么是同步函数?
什么是异步函数?
它们在线程中执行时会对线程有何影响?
一个线程如何与一个异步执行的函数进行同步?
什么是同步函数与异步函数?
依据微软的MSDN上的解说:
在一个线程中分别调用上述两种函数会对调用线程有何影响呢?
当一个线程调用一个同步函数时(例如:该函数用于完成写文件任务),如果该函数没有立即完成规定的操作,则该操作会导致该调用线程的挂起(将CPU的使用权交给系统,让系统分配给其他线程使用),直到该同步函数规定的操作完成才返回,最终才能导致该调用线程被重新调度。
当一个线程调用的是一个异步函数(例如:该函数用于完成写文件任务),该函数会立即返回尽管其规定的任务还没有完成,这样线程就会执行异步函数的下一条语句,而不会被挂起。那么该异步函数所规定的工作是如何被完成的呢?当然是通过另外一个线程完成的了啊;那么新的线程是哪里来的呢?可能是在异步函数中新创建的一个线程也可能是系统中已经准备好的线程。
一个调用了异步函数的线程如何与异步函数的执行结果同步呢?
为了解决该问题,调用线程需要使用“等待函数”来确定该异步函数何时完成了规定的任务。因此在线程调用异步函数之后立即调用一个“等待函数”挂起调用线程,一直等到异步函数执行完其所有的操作之后,再执行线程中的下一条指令。
我们是否已经发现了一个有趣的地方呢?!就是我们可以使用等待函数将一个异步执行的函数封装成一个同步函数。
什么是异步函数?
它们在线程中执行时会对线程有何影响?
一个线程如何与一个异步执行的函数进行同步?
什么是同步函数与异步函数?
依据微软的MSDN上的解说:
(1) 同步函数:当一个函数是同步执行时,那么当该函数被调用时不会立即返回,直到该函数所要做的事情全都做完了才返回。 (2) 异步函数:如果一个异步函数被调用时,该函数会立即返回尽管该函数规定的操作任务还没有完成。
在一个线程中分别调用上述两种函数会对调用线程有何影响呢?
当一个线程调用一个同步函数时(例如:该函数用于完成写文件任务),如果该函数没有立即完成规定的操作,则该操作会导致该调用线程的挂起(将CPU的使用权交给系统,让系统分配给其他线程使用),直到该同步函数规定的操作完成才返回,最终才能导致该调用线程被重新调度。
当一个线程调用的是一个异步函数(例如:该函数用于完成写文件任务),该函数会立即返回尽管其规定的任务还没有完成,这样线程就会执行异步函数的下一条语句,而不会被挂起。那么该异步函数所规定的工作是如何被完成的呢?当然是通过另外一个线程完成的了啊;那么新的线程是哪里来的呢?可能是在异步函数中新创建的一个线程也可能是系统中已经准备好的线程。
一个调用了异步函数的线程如何与异步函数的执行结果同步呢?
为了解决该问题,调用线程需要使用“等待函数”来确定该异步函数何时完成了规定的任务。因此在线程调用异步函数之后立即调用一个“等待函数”挂起调用线程,一直等到异步函数执行完其所有的操作之后,再执行线程中的下一条指令。
我们是否已经发现了一个有趣的地方呢?!就是我们可以使用等待函数将一个异步执行的函数封装成一个同步函数。
相关文章推荐
- 微信api 第三方平台授权 登录 ,获取用户信息
- RazorEngine在非MVC下的使用,以及使用自定义模板
- iOS启动图片适配问题
- mac的svn之cornerstone简易教程
- quick-mark: How Latency is Measured
- Android原生定位
- jquery对象和DOM对象的相互转换
- 项目管理工具~SVN
- c语言:把只含因子2、3和5的数称为丑数,求按从小到大的顺序的第1500个丑数(两种方法比较)
- win7 linux 搭建redis单机环境 详细
- 00 EPLAN安装问题
- 网络工具
- iOS 9之后两个应用的相互调用
- 改bug总结—2015年12月于nice实习
- ci 使用体会
- 用booktabs宏包改善你的表格
- Mos_Tec Tutorial : 001 - iOS视频录制
- SVM
- 【他山之玉】习而学的工程教育
- 微信api, 创建菜单