[转]进程同步及异步的概念

本文详细解释了同步和异步的概念及其应用场景。同步是指在没有得到结果之前,调用不会返回;而异步则是在发出调用后,调用者不能立刻得到结果,而是通过状态、通知或回调来获取结果。

同步
所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事.就像早上起床后,先洗涮,然后才能吃饭,不能在洗涮没有完成时,就开始吃饭.按照这个定义,其实绝大多数函数都是同步调用(例如sin,isdigit等)。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。最常见的例子就是
SendMessage。该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方处理完毕以后,该函数才把消息处理函数所返回的
LRESULT值返回给调用者。


异步

异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。
以CAsycSocket类为例(注意,CSocket从CAsyncSocket派生,但是起功能已经由异步转化为同步),当一个客户端通过调用
Connect函数发出一个连接请求后,调用者线程立刻可以朝下运行。当连接真正建立起来以后,socket底层会发送一个消息通知该对象。
这里
提到执行部件和调用者通过三种途径返回结果:状态、通知和回调。可以使用哪一种依赖于执行部件的实现,除非执行部件提供多种选择,否则不受调用者控制。如
果执行部件用状态来通知,那么调用者就需要每隔一定时间检查一次,效率就很低(有些初学多线程编程的人,总喜欢用一个循环去检查某个变量的值,这其实是一
种很严重的错误)。如果是使用通知的方式,效率则很高,因为执行部件几乎不需要做额外的操作。至于回调函数,其实和通知没太多区别。


本文来自优快云博客:http://blog.youkuaiyun.com/a_snail/archive/2007/01/24/1491790.aspx

同步编程异步编程是现代编程中两个核心概念,它们在处理任务执行资源管理方面有着显著的差异。以下是它们的基本概念区别: ### 同步编程的基本概念 同步编程是指任务按照顺序依次执行,每个任务必须等待前一个任务完成后才能开始。在同步模型中,程序的执行流程是线性的,开发者可以直观地预测程序的执行顺序。然而,这种线性执行方式在处理耗时操作(如I/O操作或网络请求)时,可能会导致主线程阻塞,从而影响程序的响应性性能。 ### 异步编程的基本概念 异步编程是一种非阻塞的编程模型,允许任务在后台运行,而不需要等待它们完成。通过异步编程,程序可以在等待某个任务完成的同时执行其他任务,从而提高资源利用率程序的响应性。异步编程通常依赖于回调函数、Promise对象或`async/await`语法来处理任务完成后的操作。 ### 同步异步编程的区别 1. **执行流程**:同步编程中任务按顺序执行,而异步编程允许任务并发执行。 2. **阻塞行为**:同步编程中的任务会阻塞调用它们的线程或进程,直到完成;而异步编程不会阻塞线程。 3. **响应性**:同步编程不提供响应异步操作的能力,而异步编程可以通过回调、Promise或`async/await`机制处理异步事件。 4. **API设计**:异步编程通常需要通过特定的机制(如回调、Promise或`async/await`)来处理任务完成后的操作,而同步编程的API设计相对简单。 ### 示例代码 以下是一个简单的Python示例,展示了同步异步编程的基本区别: #### 同步编程示例 ```python import time def sync_function(): print("开始同步任务") time.sleep(2) # 模拟耗时操作 print("同步任务完成") sync_function() ``` #### 异步编程示例 ```python import asyncio async def async_function(): print("开始异步任务") await asyncio.sleep(2) # 模拟耗时操作 print("异步任务完成") asyncio.run(async_function()) ``` 在同步示例中,程序会阻塞2秒,然后继续执行;而在异步示例中,程序不会阻塞主线程,可以同时处理其他任务。 ### 应用场景 - **同步编程**适用于简单的、顺序执行的任务,或者任务之间存在依赖关系的情况。 - **异步编程**适用于需要处理大量I/O操作或网络请求的应用程序,例如Web服务器、实时数据处理系统等。 通过合理选择同步异步编程模型,开发者可以根据具体需求优化程序的性能响应性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值