同步与异步到底是什么???

总得来说,同步异步出现在以下几个领域:

1  计算机网络。

数据通信技术中有同步通信与异步通信。同步通信简单的说就是你在发送数据时候我必须同时接受。这个过程有精确的时钟控制。而异步通信是你在发数据时候必须加上开始与结束符号,这样我才可以接受,异步通信没有时钟控制。因为没有了时钟的控制(额外硬件),所以成本低,设备简单,但是传输效率较低。(开始与结束符占了开销)。

在网络协议(network protocol)的三大组成部分:语法,语义,同步。这时候同步指的是事件实现的顺序。比如建立tcp连接时候的三次握手实现顺序。

2   操作系统。

中断系统的一个特点就是可以对异步事件响应。异步事件指的是断断续续,随机,没有时序关系的事件。同步事件反之,一个事件从头到尾顺序执行,没有间断。

进程间的关系有同步与互斥。同步就是多个进程协调完成一个任务。比如,司机与售票员关系。司机停车---售票员开门----乘客上车---售票员关门---司机开车。在这个过程中任务就是拉乘客。司机和售票员作为两个进程协调工作。互斥指的是多个进程竞争同一个资源。这时资源叫做临界资源(任何时刻只允许一个进程访问,三个线程可以同时时一个变量iChange减1,但任何时间只允许一个对其进行操作,火车售票问题如果不加同步最终票数会出现负值。)。

在现代操作系统中,有并发性,共享性,虚拟性,不确定性四大基础特征。而程序并发活动的实现是异步(一个程序走走停停),并发控制的时候需要用到同步技术。(Java多线程中可以使用Synchronized实现同步控制),所以并发控制需要同步,并发的实现是异步,同步过多又会导致死锁。在并发领域有一句经典的话,并发执行的可串行化。那么并行是什么?并行才是真正的并发。并发只不过在占用时间片不同上实现的。

I/O模型中,频繁出现的有同步与异步,阻塞与非阻塞。要想弄清这个问题,必须了解冯诺依曼体系结构与进程状态模型。首先理解I/O在计算机体系中作用。

一个输入操作包含两个过程:

1   等待数据准备好

2   从内核向进程复制数据。

同步与异步在I/O中指的是一种数据访问机制。

同步指的是主动请求后等待I/O,数据就绪后读写必须阻塞。

异步指的是主动请求后,可处理其他任务,等I/O完毕后通知。

阻塞指的是进程访问的数据未就绪,进程必须等待。

非阻塞指的是进程访问数据未就绪,进程可以不用等待。

进程一般有五种状态,创建进程,此时进程在就绪队列中等待cpu调度,当在cpu上执行时,此时为运行态,运行过程中可能遇到I/O请求此时进入阻塞状态,或者进程执行完,进入死亡状态。阻塞的时候,当所需资源满足时,从阻塞状态转化为就训态。如此反复。

有了以上基础知识的积淀,现在来看常用I/O模型。

完整模型请参考《Unix网络编程卷1》P127.

举个例子吧:纯概念实在难以理解。

如果说我(某个进程)去食堂吃饭(任务A),吃完后要去图书馆(任务B)。也可以去教室。(任务C)等待阿姨把饭做好。

阻塞式I/O就是我一直在等阿姨做饭。直到吃上饭。

非阻塞式I/O就是我在等的时候,会一直问阿姨饭好了没有,直到吃上饭。

同步阻塞式I/O和同步非阻塞式I/O都会使得进程阻塞。(任务卡在A那里不动了)

I/O复用涉及到select,poll函数,由于未深入理解,例子没想到。

信号驱动式就是我在等的时候,也在等其他信号,比如阿姨使眼色我让我吃饭,直到吃上饭。

异步I/O就是我在等的时候,可以去图书馆也可以去教室,饭好了后,阿姨会叫我吃饭。(发起任务A到通知结束A时候过程中可以执行选择性执行A,B,C,而不会把阻塞到任务A那里)。

看了这么多,那究竟什么是同步与异步呢?必须放在具体的环境以及项目中去深入理解。

这是我所知道的同步与异步在计算机中出现的地方,文中有很多观点是我自己理解的,可能不符合真实的含义,希望大家帮我纠正下。不甚感激。个人水平实在有限,没有贡献关于同步异步的代码。

这是我的第一篇技术博客,没想到竟然花费了2个多小时。发现自己理解的---写出来----说出来---说出来让别人理解的难度水平在递增,写作过程也是一个梳理知识体系以及思考的过程。希望自己可以坚持写博客。

时间: 2025-01-23 20:37:27

同步与异步到底是什么???的相关文章

聊聊同步、异步、阻塞与非阻塞

本文转载自: http://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666538901&idx=1&sn=d1f7d5461491a9c240f16da6b7c0ced9&scene=21#wechat_redirect 近来遇到了一些常见的概念,尤其是网络编程方面的概念,如:阻塞.非阻塞.异步I/O等等,对于这些概念自己也没有太清晰的认识,只是很模糊的概念,说了解吧也了解,但是要让自己准确的描述概念方面的具体细节,却说

[Z] IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇)

原文链接:http://blog.csdn.net/historyasamirror/article/details/5778378 当你发现自己最受欢迎的一篇blog其实大错特错时,这绝对不是一件让人愉悦的事.<IO - 同步,异步,阻塞,非阻塞 >是我在开始学习epoll和libevent的时候写的,主要的思路来自于文中的那篇link .写完之后发现很多人都很喜欢,我还是非常开心的,也说明这个问题确实困扰了很多人.随着学习的深入,渐渐的感觉原来的理解有些偏差,但是还是没引起自己的重视,觉着

同步、异步、多线程与事件型综述

转自:http://blog.csdn.net/chszs/article/details/8867174 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs首先要了解什么是阻塞和阻塞式IO.线程在执行中如果遇到磁盘读写或网络通信(统称IO操作),通常要耗费较长的时间,这时操作系统会剥夺此线程的CPU控制权,使其暂停执行,同时将资源让给其他的工作线程,这种线程调度方式称为阻塞.当IO操作完毕时,操作系统将这个线程的阻塞状态解除,恢复其对CPU的控制权,令

关于jquery同步和异步请求问题总结

关于jquery同步和异步请求问题总结 问题 这几天做项目的时候,写脚本遇到一个问题,就是jquery异步请求和同步请求执行顺序不按代码顺序执行而是最后执行导致添加数据报错,添加到空值,这怎么忍,于是我去查找jquery api,终于知道了原来jquery默认异步请求,防止数据卡死,终于让我找到了这货 async,当async: true 时,ajax请求是异步的.当async : true 时,就是同步的,但是我又有个问题,怎么设置,这个在哪设置,用$.ajax去写这个操作,不,不太麻烦了,到

IO同步与异步

一.同步与异步 同步/异步, 它们是消息的通知机制 1. 概念解释 A. 同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回. 按照这个定义,其实绝大多数函数都是同步调用(例如sin isdigit等). 但是一般而言,我们在说同步.异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务. 最常见的例子就是 SendMessage.该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回. 当对方处理完毕以后,该函数才把消息处理函数所返回的值返回给调用

ASP.NET WebAPi(selfhost)之文件同步或异步上传

前言 前面我们讲过利用AngularJs上传到WebAPi中进行处理,同时我们在MVC系列中讲过文件上传,本文结合MVC+WebAPi来进行文件的同步或者异步上传,顺便回顾下css和js,MVC作为客户端,而WebAPi利用不依赖于IIS的selfhost模式作为服务端来接收客户端的文件且其过程用Ajax来实现,下面我们一起来看看. 同步上传 多余的话不用讲,我们直接看页面. <div class="container"> <div> @if (ViewBag.

IO多路复用,同步,异步,阻塞和非阻塞 区别(转)

转自:http://www.cnblogs.com/aspirant/p/6877350.html?utm_source=itdadao&utm_medium=referral 一.什么是socket?什么是I/O操作? 我们都知道unix(like)世界里,一切皆文件,而文件是什么呢?文件就是一串二进制流而已,不管socket,还是FIFO.管道.终端,对我们来说,一切都是文件,一切都是流.在信息 交换的过程中,我们都是对这些流进行数据的收发操作,简称为I/O操作(input and outp

IO中同步、异步与阻塞、非阻塞的区别(转)

转自:http://blog.chinaunix.net/uid-26000296-id-3754118.html 一.同步与异步同步/异步, 它们是消息的通知机制 1. 概念解释A. 同步所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回. 按照这个定义,其实绝大多数函数都是同步调用(例如sin isdigit等).但是一般而言,我们在说同步.异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务.最常见的例子就是 SendMessage.该函数发送一个消息给某个窗

IO中同步、异步与阻塞、非阻塞的区别

一.同步与异步同步/异步, 它们是消息的通知机制 1. 概念解释A. 同步所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回. 按照这个定义,其实绝大多数函数都是同步调用(例如sin isdigit等).但是一般而言,我们在说同步.异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务.最常见的例子就是 SendMessage.该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回.当对方处理完毕以后,该函数才把消息处理函数所返回的值返回给调用者. B.