通俗理解同步通信与异步通信

本文介绍了同步传输与异步传输的概念。同步是发送方等接收方响应后再发下一个数据包,是阻塞模式;异步是发送方发数据后不等响应接着发下一个,是非阻塞模式。还阐述了两者在通信中的特点、适用场景及效率差异。

同步就是你叫我去吃饭,我听到了就和你去吃饭;

如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。
异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。

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

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

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

其中SPI IIC为同步通信  UART为异步通信

在串行通信中,由于是一位一位地进行数据传送。为了把每个字节区别开来,需要收发双方在传送数据的串行信息流中,加入一些标记信号位。在数据中根据所添加的标记信号位的不同方式,分成同步通信和异步通信两种。 1.“异步通信”是一种很常用的通信方式(效率较低)异步通信在发送字符时,发送端可以在任意时刻开始发送字符,因此必须在每一个字符的开始和结束的地方加上标志,即加上开始位和停止位,以便使接收端能够正确地将每一个字符接收下来。所传送的数据以字节为单位。每个字节前加上一位起始位,每个字节的后面加上停止位。好处:异步通信的好处是通信设备简单、便宜,但传输效率较低。 2.“同步通信”的通信双方必须先建立同步,即双方的时钟要调整到同一个频率。收发双方不停地发送和接收连续的同步比特流。一种是使用全网同步,用一个非常精确的主时钟对全网所有结点上的时钟进行同步。一种是使用准同步,各结点的时钟之间允许有微小的误差,然后采用其他措施实现同步传输。同步通信是把所传送的数据以多个字节(100字节以上)为单位,在其前后添加标志。

网络上对同步传输与异步传输的文章一大把,各种图示解说也很多,但看完终归有点一头雾水,当然了,要想真正透彻地理解这些专业性的概念,最好的方式还是在实践中找到这些概念的体现。

同步传输与异步传输虽然从名字上来看是两个完全不同的方式,但要知道,他们的目的是相同的,其实他们都是在进行位同步的动作,只不过一个选择了直捣黄龙,而另一个是迂回作战。所以首先应该明确一个思想,如果想理解这两种方式只要理解了他们是在如何进行同步就可以了。

异步通信:

异步通信中的接收方并不知道数据什么时候会到达,收发双方可以有各自自己的时钟。发送方发送的时间间隔可以不均,接收方是在数据的起始位和停止位的帮助下实现信息同步的。这种传输通常是很小的分组,比如一个字符为一组,为这个组配备起始位和结束位。所以这种传输方式的效率是比较低的,毕竟额外加入了很多的辅助位作为负载,常用在低速的传输中。

举个例子,我们的键盘按下一个按键,发出一个字符信号,异步传输机制就会为它加上前后的辅助同步信息,帮助接收方识别到我们按下了哪一个按键。因为我们敲击键盘的节奏不固定,所以异步是一种很适合的方式。

同步通信:

同步通信中双方使用频率一致的时钟,它的分组相比异步则大得多,称为一个数据帧,通过独特的bit串作为启停标识。发送方要以固定的节奏去发送数据,而接收方要时刻做好接收数据的准备,识别到前导码后马上要开始接收数据了。同步这种方式中因为分组很大,很长一段数据才会有额外的辅助位负载,所以效率更高,更加适合对速度要求高的传输,当然这种通信对时序的要求也更高。

总结一下,异步传输其实是通过字符数据前后的开始和停止码进行再同步,弥补自己刚才注意不集中的不足;而同步方式则是一个规矩的好学生,时刻候命准备工作。异步是你扔出去一个内容,对方靠着内容前后他能嗅到的异样在人潮之中发现了它,把这个内容存下来;而同步是对方在时刻等着你发布号令,你告诉对方我要发送了哦,然后双方一拍即合。
 

### 三级标题:PHP 中同步任务异步任务的区别 在 PHP 中,同步任务和异步任务的核心区别在于执行方式和对主线程的影响。同步任务是指任务按照顺序依次执行,当前任务未完成前,后续任务必须等待,形成阻塞;而异步任务则允许任务在后台执行,主线程可以继续处理其他逻辑,无需等待当前任务完成[^1]。 同步任务的执行流程较为直观,适用于逻辑简单、任务顺序明确的场景。例如,在一个函数中调用数据库查询并等待结果返回后才继续执行后续操作,这就是典型的同步模式。这种方式虽然便于调试和理解,但在执行耗时操作(如远程 API 调用、文件读写)时会导致主线程阻塞,影响整体性能。 异步任务则通过事件循环或回调机制实现非阻塞执行。PHP 本身是同步语言,但借助 `ReactPHP`、`Amp` 等异步框架,可以实现并发处理多个 I/O 操作。例如,使用 `ReactPHP` 可以同时发起多个 HTTP 请求,并在任意一个请求完成时立即处理其结果,而不是等待所有请求顺序完成。这种方式显著提升了系统的吞吐能力和响应速度,尤其适合高并发、网络密集型的应用场景[^3]。 ```php // 同步任务示例 function syncFetchData() { $data1 = file_get_contents('https://api.example.com/data1'); $data2 = file_get_contents('https://api.example.com/data2'); return [$data1, $data2]; } ``` ```php // 异步任务示例(使用 ReactPHP) require 'vendor/autoload.php'; $loop = React\EventLoop\Factory::create(); $client = new React\Http\Client($loop); $promise1 = $client->request('GET', 'https://api.example.com/data1'); $promise2 = $client->request('GET', 'https://api.example.com/data2'); $promise1->then(function ($response) { echo "Data 1 received\n"; }); $promise2->then(function ($response) { echo "Data 2 received\n"; }); $loop->run(); ``` 在实际开发中,选择同步还是异步取决于具体业务需求和性能目标。对于需要快速响应、并发处理多个请求的 Web 应用,异步编程模型更具优势;而对于逻辑简单、任务顺序固定的脚本或批处理程序,同步方式可能更易于实现和维护[^3]。 ### 三级标题:PHP 异步任务的常见应用场景 PHP 的异步任务常用于需要并发处理 I/O 操作的场景,如同时发起多个 HTTP 请求、处理 WebSocket 通信、监听多个网络连接等。通过异步模型,PHP 应用可以在等待一个请求响应的同时处理其他任务,从而提升整体效率。例如,在构建 API 网关时,可以同时调用多个后端服务并将结果聚合返回,而不是顺序调用导致响应时间叠加[^3]。 此外,异步任务也适用于长时间运行的守护进程,如消息队列消费者、实时日志处理等。在这些场景中,任务不需要立即完成,但需要持续监听并响应外部事件。使用异步框架可以更高效地管理资源,避免阻塞主线程导致服务不可用[^3]。 ### 三级标题:PHP 异步任务的挑战解决方案 尽管异步任务在性能上有显著优势,但也带来了编程复杂度的提升。由于异步任务的执行顺序不可预测,开发者需要特别注意任务之间的依赖关系和状态同步问题。例如,在多个异步请求完成后才进行数据汇总,就需要使用 `Promise.all()` 或类似的机制来确保所有任务完成后再执行后续逻辑[^2]。 异常处理也是异步编程中的难点。在同步代码中,可以直接使用 `try/catch` 捕获异常,而在异步环境中,异常通常通过 `catch` 回调或 `Promise` 的拒绝(reject)状态来处理。开发者需要确保每个异步操作都有完善的错误处理逻辑,以避免未捕获的异常导致整个程序崩溃[^2]。 为了解决这些问题,PHP 社区提供了多种工具和框架来简化异步编程。例如,`ReactPHP` 提供了事件循环、HTTP 客户端、DNS 解析等功能,帮助开发者构建高性能的异步应用;`Amp` 则提供了基于协程的异步编程模型,使得异步代码更接近同步代码的写法,提高了可读性和可维护性。 ### 三级标题:PHP 同步异步任务的性能对比 从性能角度看,同步任务在逻辑简单、任务数量少的场景下表现良好,但随着任务数量增加,主线程频繁阻塞会导致整体响应时间显著上升。而异步任务通过并发执行多个 I/O 操作,减少了等待时间,提升了吞吐量。例如,在同时请求多个外部 API 时,同步方式需要依次等待每个请求完成,而异步方式可以在一个请求等待响应时处理其他请求,从而将总耗时从多个请求时间的累加降低到最大请求时间[^3]。 然而,异步任务并非总是优于同步任务。在 CPU 密集型任务中,异步模型并不能带来明显优势,因为 CPU 无法真正并行处理多个任务。此外,异步任务的上下文切换和事件循环管理也会带来一定的性能开销。因此,在选择同步或异步模型时,应根据任务类型和系统资源进行权衡[^1]。 ### 三级标题:PHP 异步任务的未来趋势 随着 PHP 在现代 Web 开发中的应用不断扩展,异步编程模型正变得越来越重要。PHP 8 引入了 `Fiber`(纤程),为开发者提供了更轻量级的并发机制,使得异步编程更加灵活和高效。结合 `Swoole` 等协程框架,PHP 应用可以实现高性能的异步网络服务,进一步拓展其在微服务、实时通信等领域的应用[^3]。 未来,PHP 的异步能力将持续增强,更多框架和工具将支持异步编程模型,帮助开发者构建更高效、更可靠的应用程序。无论是在传统 Web 请求处理,还是在高并发、低延迟的实时系统中,异步任务都将成为 PHP 开发的重要组成部分[^3]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值