讲一下同步异步(进程和IO)

1.进程同步异步:

在多道程序环境下,当程序并发执行时,由于他们之间会资源共享和进程合作,然后会让同处于一个系统中的各个进程之间可能存在以下两种形式的制约关系:直接制约关系和间接制约关系。

然后直接制约关系。这种制约主要源于进程间的合作。例如,有一输入进程A通过单缓冲向进程B提供数据。当该缓冲为空时,计算进程因不能获得所需数据而阻塞,而当进程A把数据输入缓冲区后,便将进程B唤醒;反之,当缓冲区已满时,进程A因不能再向缓冲区投放数据而阻塞,当进程B将缓冲区数据取走后便可唤醒A。

间接相互制约关系。同处于一个系统中的进程,通常都共享着某种系统资源,如共享CPU、共享IO设备等。所谓间接相互制约即源于这种资源共享。例如,有两个进程A和B,如果在A进程提出打印请求时,系统已将唯一的一台打印机分配给了进程B,则此时进程A只能阻塞;一旦进程B将打印机释放,则A进程才能由阻塞改为就绪状态。

我们把异步环境下的一组并发进程直接制约关系称为进程间的同步。具有同步关系的一组并发过程称为合作进程。

实现同步的方式:信号量机制。管程。

2.IO同步异步

这边有同步IO和异步IO

1.同步IO有阻塞IO、非阻塞IO,多路复用IO与信号驱动IO

阻塞IO:对于network io来说,很多时候数据在一开始还没到达(比如,还没有收到一个完整的UDP包),这个时候kernel就要等待足够的数据到来。而在用户进程这边,整个进程会被阻塞。当kernel一直等到数据准备好了,就会将数据从kernel中拷贝到用户内存,用户进程才解除block状态。

信号驱动IO,不是异步IO。信号驱动IO是指:进程预先告知内核,使得当某socketfd有event(事件)发生时,内核使用信号通知相关进程。

2.异步IO,用户直接告诉内核用户缓冲区的位置以及IO完成之后内核通知应用程序的方式。返回的是完成事件。而同步IO使应用程序将数据从内核缓冲区读入用户缓冲区或者将数据从用户缓冲写入内核缓冲区,返回的是就绪事件。

猜你喜欢

转载自my.oschina.net/134596/blog/1648186