码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-02-18 10:16:03      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:同步与异步   i/o模型   阻塞与非阻塞   进程   

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

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个多小时。发现自己理解的---写出来----说出来---说出来让别人理解的难度水平在递增,写作过程也是一个梳理知识体系以及思考的过程。希望自己可以坚持写博客。

    

   










本文出自 “我的博客” 博客,请务必保留此出处http://thinklili.blog.51cto.com/10867130/1742869

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

标签:同步与异步   i/o模型   阻塞与非阻塞   进程   

原文地址:http://thinklili.blog.51cto.com/10867130/1742869

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!