博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
select和epoll学习总结
阅读量:5085 次
发布时间:2019-06-13

本文共 580 字,大约阅读时间需要 1 分钟。

一、实现

  Select实现

  原理:

   Select把要监听的文件信息拷贝到内核层。接着遍历所有监听的文件描述符对应的驱动程序的Poll函数,poll函数把当前进程挂到该设备驱动的等待队列中去,然后Poll函数会返回哪些资源可用的bitmask。如果有资源可用,则把表示哪些文件有事件的bitmask拷贝到用户空间。如果没有一个资源可用,则select会让当前进程睡眠,等有资源可用时,当前进程在资源等待队列中被唤醒,循环扫描。

  过程:

  1. 把需要监听文件的bitmap拷贝到内核空间
  2. 遍历需要监听的文件的poll方法,把当前进程挂到设备的等待队列中,poll返回设备是否可读写的bitmask,并根据bitmaskres_inres_outres_ex赋值。

    1)此时进程并没有睡眠。

    (2)设备有读写事件时会唤醒相关等待队列上的进程。

  1. 遍历完所有fd,如果有可读写的文件,则把处理后的fd_set拷贝到用户空间。如果没有可读写文件,则调用schedule_timeout使当前进程睡眠,等待被唤醒,唤醒后重复23步。

  Epoll实现

   

  原理:

   epoll使用了一个虚拟文件系统

  过程:

二、优缺点

转载于:https://www.cnblogs.com/simonlv/p/3960019.html

你可能感兴趣的文章
Linux架构和目录-基础篇
查看>>
BIOS与UEFI、MBR和GPT介绍
查看>>
第四次作业
查看>>
mac系统安装mysql
查看>>
科学证明?不存在!
查看>>
定时器NSTimer 分类: ios开发 2015-...
查看>>
easyui tree 更改图标
查看>>
Docker镜像的导出和载入
查看>>
linux 使用ssh连接其他服务器
查看>>
Kibana6.x.x——启动后的一些警告信息记录以及解决方法
查看>>
ural 1297. Palindrome
查看>>
php-5.2.14 编译参数,成功的
查看>>
hive内置函数详解
查看>>
python 监听端口
查看>>
Mac homebrew
查看>>
[Linux基础]Linux基础知识入门及常见命令.
查看>>
python之time模块
查看>>
Mybatis文章
查看>>
数据库任务进度记录
查看>>
#include”* .h“ 在查找预编译头使用时跳过
查看>>