目录
基本概念
同步和异步
阻塞和非阻塞
线程在运行过程中,可能由于以下几种原因进入阻塞状态:
可能阻塞套接字的Linux Sockets API调用分为以下四种
五种 I/O 模型
阻塞I/O
非阻塞I/O
编辑
I/O多路复用模型
信号驱动式I/O模型
异步I/O 模型
五种 I/O 模型的对比编辑
基本概念
I/O 即数据的读取(接收)或写入(发送)操作;
通常用户进程中的一个完整I/O 分为两个阶段
1、用户进程空间<-->内核空间;
2、内核空间 <--> 设备空间(磁盘、网卡等)
I/O 分为内存I/O 、网络I/O 和磁盘I/O 三种;
同步和异步
1、对于一个线程的请求调用来讲,同步和异步的区别在于是否要等这个请求出最终结果;
2、对于多个线程而言,同步或异步就是线程间的步调是否要一致、是否要协调;
3、同步也经常用在一个线程内先后两个函数的调用上;
4、异步就是一个请求返回时一定不知道结果,还得通过其他机制来获知结果,如:主动轮询或被动通知。
阻塞和非阻塞
1、阻塞与非阻塞与等待消息通知时的状态(调用线程)有关
2、阻塞和同步是完全不同的概念。同步是对于消息的通知机制而言,阻塞是针对等待消息通知时的状态来说的
3、进程从创建、运行到结束总是处于下面五个状态之一:新建状态、就绪状态、运行状态、阻塞状态及死亡状态
线程在运行过程中,可能由于以下几种原因进入阻塞状态:
1、线程通过调用sleep方式进休眠状态
2、线程调用一个在I/O上被阻塞的操作,即该操作在输入/输出操作完成前不会返回到它的调用者
3、线程试图得到一个锁,而该锁正被其他线程持有,于是只能进入阻塞状态,等到获取了同步锁,才能恢复执行
4、线程在等待某个触发条件
可能阻塞套接字的Linux Sockets API调用分为以下四种
1、输入操作
2、输出操作
3、接受连接
4、外出连接
五种 I/O 模型
阻塞I/O
非阻塞I/O
I/O多路复用模型
信号驱动式I/O模型
异步I/O 模型
五种 I/O 模型的对比