千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:青岛千锋IT培训  >  技术干货  >  linuxepoll,linuxepoll模型实现好友聊天功能

linuxepoll,linuxepoll模型实现好友聊天功能

来源:千锋教育
发布人:xqq
时间: 2023-11-23 15:48:10

Handler消息机制(一):Linux的epoll机制

1、在 Linux 中,epoll 机制是一个重要的机制。在 Android 中的 Handler,简单的利用了 epoll 机制,做到了消息队列的阻塞和唤醒。

2、epoll是linux中IO多路复用的一种机制,I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。

3、Epoll可是当前在Linux下开发大规模并发网络程序的热门人选,Epoll 在Linux6内核中正式引入,和select相似,其实都I/O多路复用技术而已,并没有什么神秘的。

4、epoll_create()用来创建一个epoll句柄。 epoll_ctl() 用于向内核注册新的描述符或者是改变某个文件描述符的状态。

关于Linux下的select/epoll

select是IO多路复用模型的一种实现,当select函数返回后可以通过轮询fdset来找到就绪的socket。优点是几乎所有平台都支持,缺点在于能够监听的fd数量有限,Linux系统上一般为1024,是写死在宏定义中的,要修改需要重新编译内核。

epoll在Kernel内核中存储了对应的数据结构(eventpoll)。

文件抽象 在 Linux 内核里,文件是一个抽象,设备是个文件,网络套接字也是个文件。文件抽象必须支持的能力定义在 file_operations 结构体里。

Epoll的使用详解

首先通过 create_epoll(int maxfds) 来创建一个epoll的句柄,其中 maxfds 为你epoll所支持的最大句柄数。这个函数会返回一个新的epoll句柄,之后的所有操作将通过这个句柄来进行操作。

epoll是select和poll的改进版本,更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。

正确使用select和epoll需要理解在什么情况下,文件描述符会表示为就绪态。 SUSv3中说:如果对I/O函数的调用不会被阻塞,而不论该函数是否能够实际传输数据,此时文件描述符(未指定 O_NONBLOCK 标志)被认为是就绪的。

epoll API可以使用edge-triggered和level-triggered两种接口,并且可以高性能的同时监视大量的fd,这是对epoll相对鱼poll的核心优势。

调用者可以设定EPOLLONESHOT标志,在 epoll_wait(2)收到事件后epoll会与事件关联的文件句柄从epoll描述符中禁止掉。因此当EPOLLONESHOT设定后,使用带有 EPOLL_CTL_MOD标志的epoll_ctl(2)处理文件句柄就成为调用者必须作的事情。

epoll的两种触发模式分别是ET(edge trigger)边缘触发和LT(level triggered)水平触发。epoll的默认触发模式是LT,select、poll都是LT触发。缓冲区只要有数据未读就会导致epoll_wait返回。上次读数据未读完仍会导致epoll_wait返回。

面试必问的epoll技术,从内核源码出发彻底搞懂epoll

总结epoll_create函数所做的事:调用epoll_create后,在内核中分配一个eventpoll结构和代表epoll文件的file结构,并且将这两个结构关联在一块,同时,返回一个也与file结构相关联的epoll文件描述符fd。

epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。

首先,我们需要了解epoll编程的概念。epoll是一项对Linux内核进行的轮询,以处理大量的文件描述符和一个增强版的Linux下多路复用IO接口选择/投票。 一个成熟的高性能服务器,epoll相关代码,不到1万分之一。

Epoll可是当前在Linux下开发大规模并发网络程序的热门人选,Epoll 在Linux6内核中正式引入,和select相似,其实都I/O多路复用技术而已,并没有什么神秘的。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

什么是linux操作系统,linux操作系统属于什么系统

2023-11-23

linux中vi的使用,linux vi常用命令

2023-11-23

linuxui编程,linux软件编程

2023-11-23

最新文章NEW

linux内存分配与释放,linux内存管理机制

2023-11-23

linux找不到万兆网卡,linux 找不到网卡

2023-11-23

linux如何查看进程及端口号,linux如何查看一个进程的端口号

2023-11-23

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>