同步和异步的概念

进程同步用来实现程序并发执行时候的可再现性。

一.进程同步及异步的概念

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

sendmessage。该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方处理完毕以后,该函数才把消息处理函数所返回的lresult值返回给调用者。

2.异步

异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。

以casycsocket类为例(注意,csocket从casyncsocket派生,但是其功能已经由异步转化为同步),当一个客户端通过调用connect函数发出一个连接请求后,调用者线程立刻可以朝下运行。当连接真正建立起来以后,socket底层会发送一个消息通知该对象。

这里提到执行部件和调用者通过三种途径返回结果:状态、通知和回调。可以使用哪一种依赖于执行部件的实现,除非执行部件提供多种选择,否则不受调用者控制。如果执行部件用状态来通知,那么调用者就需要每隔一定时间检查一次,效率就很低(有些初学多线程编程的人,总喜欢用一个循环去检查某个变量的值,这其实是一种很严重的错误)。如果是使用通知的方式,效率则很高,因为执行部件几乎不需要做额外的操作。至于回调函数,其实和通知没太多区别。

进程同步的基本概念

在计算机系统中,由于资源有限而导致了进程之间的资源竞争和共享,因此,进程的并发执行不仅仅是用户程序的执行开始时间的随机性和提高资源利用率的结果,也是资源有限性导致资源的竞争与共享对进程的执行过程进行制约所造成的。那么,在进程的并发执行过程中存在哪些制约呢?

二.同步与异步传输:

1.异步传输

通常,异步传输是以字符为传输单位,每个字符都要附加 1 位起始位和 1 位停止位,以标记一个字符的开始和结束,并以此实现数据传输同步。所谓异步传输是指字符与字符(一个字符结束到下一个字符开始)之间的时间间隔是可变的,并不需要严格地限制它们的时间关系。起始位对应于二进制值0,以低电平表示,占用 1 位宽度。停止位对应于二进制值 1,以高电平表示,占用 1~2 位宽度。一个字符占用 5~8位,具体取决于数据所采用的字符集。例如,电报码字符为 5 位、ASCII码字符为 7 位、汉字码则为8 位。此外,还要附加 1 位奇偶校验位,可以选择奇校验或偶校验方式对该字符实施简单的差错控制。发送端与接收端除了采用相同的数据格式(字符的位数、停止位的位数、有无校验位及校验方式等)外,还应当采用相同的传输速率。典型的速率有:9 600 b/s、19.2kb/s、56kb/s等。

异步传输又称为起止式异步通信方式,其优点是简单、可靠,适用于面向字符的、低速的异步通信场合。例如,计算机与Modem之间的通信就是采用这种方式。它的缺点是通信开销大,每传输一个字符都要额外附加2~3位,通信效率比较低。例如,在使用Modem上网时,普遍感觉速度很慢,除了传输速率低之外,与通信开销大、通信效率低也密切相关。

2. 同步传输

通常,同步传输是以数据块为传输单位。每个数据块的头部和尾部都要附加一个特殊的字符或比特序列,标记一个数据块的开始和结束,一般还要附加一个校验序列 (如16位或32位CRC校验码),以便对数据块进行差错控制。所谓同步传输是指数据块与数据块之间的时间间隔是固定的,必须严格地规定它们的时间关系。

三.同步阻塞与异步阻塞:

同步是阻塞模式,异步是非阻塞模式。 

我的理解:同步是指两个线程的运行是相关的,其中一个线程要阻塞等待另外一个线程的运行。异步的意思是两个线程毫无相关,自己运行自己的。 

同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。 

异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。 

举个不太恰当的例子,就像: 

SendMessage(...) 

TRACE0("just  like  send"); 

PostMessage(...) 

TRACE0("just  like  WSASend  using  overlapped"); 

 SendMessage是调用的时候不返回,等消息响应后才执行TRACE0,这就是同步. 

PostMessage是调用后马上返回,不用消息响应就执行TRACE0,这就是异步.

四.其它解释:

 同步和异步的区别

 举个例子:普通B/S模式(同步)AJAX技术(异步)

同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事

异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕

同步就是你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。

异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。

所以,要我请你吃饭就用同步的方法,要请我吃饭就用异步的方法,这样你可以省钱。

举个例子 打电话时同步 发消息是异步

转载于:https://www.cnblogs.com/SH-xuliang/p/5653490.html

<think>我们正在讨论前端开发中的同步异步概念。根据引用[1]引用[2],同步操作会阻塞后续代码的执行,而异步操作不会阻塞,允许后续代码继续执行。引用[2]还提到,异步操作通常用于网络请求、定时器等需要等待的操作,而同步操作用于简单计算。引用[3]则展示了使用async/await处理异步任务的示例。为了清晰说明,我将按照以下结构组织回答:1.基本概念:分别解释同步异步。2.区别:对比两者的执行顺序、阻塞性、使用场景代码复杂性。3.示例:提供同步异步的代码示例,并解释执行过程。4.补充:简要说明JavaScript的异步机制(事件循环)。注意:由于要求使用中文回答,且数学表达式使用$...$,但本问题不涉及数学公式,因此主要使用文字描述。另外,根据指令,需要在回答末尾生成相关问题。</think>### 前端开发中的同步异步概念解析 #### 一、基本概念 1. **同步(Synchronous)** 代码逐行顺序执行,必须等待当前任务**完全完成**后才能执行下一个任务。例如: ```javascript console.log("任务1"); // 必须执行完 console.log("任务2"); // 才能执行 ``` 执行流程:任务1 → 等待完成 → 任务2 → 等待完成 → ... [^1] 2. **异步(Asynchronous)** 不等待当前任务完成,直接执行后续代码。任务完成后通过**回调函数/Promise**通知结果。例如: ```javascript setTimeout(() => console.log("异步任务"), 1000); // 不阻塞后续执行 console.log("继续执行"); ``` 输出顺序:`继续执行` → (1秒后)`异步任务` [^2] #### 二、核心区别 | 特性 | 同步 | 异步 | |--------------|--------------------------|-------------------------------| | **执行顺序** | 顺序执行,严格依赖前任务 | 后续代码立即执行,不等待 | | **阻塞性** | 阻塞主线程,可能导致卡顿 | 非阻塞,保持界面响应 | | **使用场景** | 简单计算、即时操作 | 网络请求、文件读写、定时操作 | | **代码复杂度**| 简单直观 | 需处理回调/Promise/async-await| #### 三、典型示例 1. **同步阻塞示例** 点击按钮时界面冻结: ```javascript button.addEventListener('click', () => { for(let i=0; i<1000000000; i++){} // 同步阻塞 showResult(); // 长时间等待后才能执行 }); ``` 2. **异步解决方案** **回调函数**: ```javascript fetch('/api/data').then(response => { console.log("获取数据成功"); }); // 不阻塞后续渲染 ``` **async/await**: ```javascript async function loadData() { const data = await fetch('/api/data'); // 异步等待但不阻塞主线程 render(data); } [^3] ``` #### 四、底层机制:事件循环(Event Loop) JavaScript通过**事件循环**实现异步: 1. 同步任务进入主线程执行 2. 异步任务交给Web API(如setTimeout/fetch) 3. 完成后回调函数推入**任务队列** 4. 主线程空闲时从队列中取出回调执行 ![事件循环示意图](https://example.com/event-loop.png) *(简言之:同步优先,异步回调后补位)* [^2] > **关键结论**:异步通过非阻塞执行优化用户体验,尤其在网络请求等I/O操作中避免界面卡顿,是现代Web应用流畅性的基石。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值