linux内核中等待队列和poll轮训

提前知识

等待队列

阻塞与非阻塞的概念与区别

阻塞与非阻塞:
所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。

所谓非阻塞方式non-block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不同来反映函数的执行情况,如果事件发生则与阻塞方式相同,若事件没有发生则返回一个代码来告知事件未发生,而进程或线程继续执行,所以效率较高。可是使用Select就可以完成非阻塞方式工作的程序,它能够监视我们需要监视的文件描述符的变化情况——读写或是异常。
linux中阻塞和非阻塞的区别

总结异步和同步概念与区别 (五大io模型)

在通讯中,

同步是指发送端和接收端一直在等待相互的信号,如果没有连接成功就一直发送,造成阻塞状态

异步是指发送端和接受端即使没有接收到相互的信号,也可以先挂起线程资源,做其他的事情,等到调用的时候再激活线程资源,这是非阻塞状态
五大io模型

阻塞IO(BIO)

在这里插入图片描述

非阻塞IO

在这里插入图片描述

IO多路复用

在这里插入图片描述

扫描二维码关注公众号,回复: 11035537 查看本文章

信号驱动IO

在这里插入图片描述

异步IO

在这里插入图片描述

休眠机制:

使用过程

1.创建等待队列头

#define DECLARE_WAIT_QUEUE_HEAD(name) \
	wait_queue_head_t name = __WAIT_QUEUE_HEAD_INITIALIZER(name)
 动态定以并初始化:
 wait_queue_head_t name;
 init_waitqueue_head(q)	
默认情况下会把当前进程作为等待任务放到等待队列中

2.在需要休眠的地方调用休眠操作

wait_event 、 wait_event_timeout  wait_event_interruptible(首选)

3.在满足条件的地方唤醒等待队列

wake_up 、wake_up_interruptible
发布了34 篇原创文章 · 获赞 10 · 访问量 3345

猜你喜欢

转载自blog.csdn.net/ice_masters/article/details/105111339