【网络编程】(二)同步和异步,阻塞和非阻塞,多路复用技术

来源:互联网 发布:suse 11 安装yum 编辑:程序博客网 时间:2024/05/23 13:53
基本概念解析


1) 阻塞和非阻塞:

阻塞和非阻塞:是进程在访问数据的时候,数据内是否准备就绪的一种处理方式,当数据没有准备的时候 

阻塞:往往需要等待缓冲区中的数据准备好过后才处理其他的事情,否则一直等待。

非阻塞:当进程访问数据缓冲区的时候  数据没有准备好的时候   直接返回 不需要等待。数据有的时候 也直接返回.


2)同步和异步

同步和异步:都是基于应用程序和操作系统处理IO时间锁采用的方式。

同步应用程序要直接参与IO读写的操作。必须阻塞在某个方法上(read  或 write)面等待我们的IO时间完成 (阻塞IO事件或则通过轮询IO事件的方式)。对线程的性能开销比较大。

异步:所有的IO读写交给操作系统去处理.。这个时候  我们可以去做其他的事情  并不需要去完成真正的IO操作,当操作完成IO后 会通知我们的应用程序。

 

3)IO事件的轮询  --多路复用技术(select模式)

读写事件交给一个单独的线程来处理。

这个线程完成IO事件的注册。

并不断的去轮询我们的读写缓冲区  看是否有数据准备好。 

通知相应读写线程. 


这样的话  以前的读写线程就可以做其他的事情  这个时候阻塞的不是所有的IO线程   阻塞的select这个线程.

 
    Client                 Select  管家                BOSS


当客人来的时候,就给管家说 我来了,

管家得到这个注册信息后, 给BOSS说  我这里有一个或则多个客人 

BOSS你去给某人A这件东西,给另外人B这样东西。


这个时候  客人是可以去做自己的事情的,比如看看花园等等,

当管家知道boss给他任务后 他就是去找对应的某人  告诉他boss给他某样东西。(根据我们的注册信息)

 
原创粉丝点击