欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

进程同步与异步

程序员文章站 2022-05-18 13:09:21
...

   说起进程的同步和异步,应该从进程的阻塞和挂起

 1.阻塞和挂起区别

  1)挂起是一种主动行为,因此恢复也应该主动完成,而阻塞是一种杯中行为,是在等待时间或者资源任务时的表现,我们也不知道什么时候阻塞什么时候恢复阻塞,是透明的。

  2)阻塞任务释放Cpu,其他任务可以获得cpu运行,而挂起不释放cpu,如果任务优先级高就永远轮不到其他任务,一般挂起用于程序调试中的条件中断。

  3)任务调度是操作系统实现的,任务调度时,直接忽略挂起状态的任务,但会顾及处于阻塞状态下的任务,阻塞任务只要获得资源就会转为就绪状态,而挂起不行

  4)挂起是主动的,一般用挂起函数操作,若不去激活,则一直处于挂起状态,而阻塞是因为资源被其他任务抢占而处于休眠状态,两者的表现方式都是从就绪状态里清掉,只不过实现方式不同

 

2.同步和异步的区别

   虽然整天听别人说同步异步,但是还是搞不清楚,什么是同步什么是异步。现在我们用通俗易懂的例子来说明同步和异步的差别。

 

  1)在数据传输上,同步传输和异步传输:

  同步传输:是以数据块为基本单位进行传输,发出数据后,等待接收方响应以后才发下一个数据包。

  异步传输:是以字符为基本单位进行传输,不等待接收方响应,接着发下一个数据包的通讯方式。

  2)在B/S架构中:

    http协议:由于http本身是基于tcp连接的,而tcp链接要通过三次握手协议,每次请求,必须等待接受方回复,所以Http本身是同步的,没有异步的Http协议。通俗来将当我们通过一个连接访问网站的时候,浏览器什么也不干,就只是等着接受返回来的http响应,如果一直没有响应,那么就一直等待,知道返回渲染的页面或者请求失败信息。

   Ajax:上述的同步方式,显然不利于用户的体验,所以出现了Ajax技术,ajax技术本身是一种异步通信,当浏览器发出请求信号后,无需一直等待接受整个http返回的信息,可以去做其他的事情。

      但是从实质来说,异步是基于同步来实现的,像ajax技术,虽然浏览器不需要等待http返回的信息,可以去干其他事情,但是为什么当ajax返回的信息,浏览器能否接收到呢,这说明浏览器还是一直在等待返回的信息,实际上是浏览器设置了一个监听线程在不断的等待http响应,也就是说把原本有浏览器进程所做的事情交给了浏览器的某个线程去完成

 

3.同步基本概念

   当两个进程并发执行时,由于资源共享或者进程合作,使同处于一个系统中的进程之间可能存在以下两种形式的同步关系:

   1)间接同步关系(间接制约):资源共享导致了这种同步关系的形成,比如AB两个打印进程,同时共享打印设备,当A进程占用打印机打印的时候,B得不到打印机资源,则B处于阻塞状态,必须等A释放打印机资源,B才能将阻塞状态变为就绪状态。

   
进程同步与异步
            
    
    博客分类: 进程和线程 进程同步阻塞异步 

   2)直接同步关系(直接制约):进程合作导致这种同步关系的形成。比如AB两个进程,B需要从缓冲区拿A进程的输出结果。A进程通过把输出结果输出到一个缓冲区,当缓冲区为空时,B进入阻塞状态,当A进程输出结果到缓冲区后,唤醒B进程,当缓冲区满时,A进程进入组则状态.

 
进程同步与异步
            
    
    博客分类: 进程和线程 进程同步阻塞异步 4.解决同步问题

利用互斥和信号量来解决同步问题。

互斥,当一个资源(临界资源)被一个进程访问时,其他进程如果想访问该资源,就必须等待。(比如一个单人卫生间,如果一个人进去使用了,门锁住,那么其他人想使用必须等待)。

信号量,其实就是一个变量,来描述共享资源的空间,来控制同步问题。(比如一个厕所有5间卫生间,当来一个人就singal-1,这是P操作申请空间,当厕所出去一个人singal+1,这是V操作释放空间,而且不可以同时操作信号量,而且singal最大值是5)当一个人来厕所,首先先申请空间,singal-1,如果singal>=0,则可以进去,如果singal<0那么必须等待,如果一个人要出去,singal=0,表示没有人,不可能出去。所以这样就保证了同步。

 

 

 

  • 进程同步与异步
            
    
    博客分类: 进程和线程 进程同步阻塞异步 
  • 大小: 50.7 KB
  • 进程同步与异步
            
    
    博客分类: 进程和线程 进程同步阻塞异步 
  • 大小: 58.9 KB