当前位置: 首页 > news >正文

网站建设服务面试题网页效果图设计教程

网站建设服务面试题,网页效果图设计教程,怎么在自己的电脑上做网站,建筑人才网官方网站查询select#xff0c;poll#xff0c;epoll都是IO多路复用的机制。I/O多路复用就是通过一种机制#xff0c;一个进程可以监视多个描述符#xff0c;一旦某个描述符就绪#xff08;一般是读就绪或者写就绪#xff09;#xff0c;能够通知程序进行相应的读写操作。但selectpollepoll都是IO多路复用的机制。I/O多路复用就是通过一种机制一个进程可以监视多个描述符一旦某个描述符就绪一般是读就绪或者写就绪能够通知程序进行相应的读写操作。但selectpollepoll本质上都是同步I/O因为他们都需要在读写事件就绪后自己负责进行读写也就是说这个读写过程是阻塞的而异步I/O则无需自己负责进行读写异步I/O的实现会负责把数据从内核拷贝到用户空间。 select int select (int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);select函数监视的文件描述符分3类分别是writefds、readfds、和exceptfds。调用后select函数会阻塞直到有描述副就绪有数据 可读、可写、或者有except或者超时timeout指定等待时间如果立即返回设为null即可函数返回。当select函数返回后可以 通过遍历fdset来找到就绪的描述符。 select的缺点 select支持的文件描述符数量太小了默认是1024 每次调用select都需要把fd集合从用户态拷贝到内核态这个开销在fd很多时会很大 每次调用select都需要在内核遍历传递进来的所有fd查看有没有就绪的fd这个开销在fd很多时也很大效率随FD数目增加而线性下降 poll int poll (struct pollfd *fds, unsigned int nfds, int timeout);struct pollfd {int fd; /* file descriptor */short events; /* requested events to watch */short revents; /* returned events witnessed */ }; pollfd结构包含了要监视的event和发生的event不再使用select“参数-值”传递的方式。同时pollfd并没有最大数量限制但是数量过大后性能也是会下降。 和select函数一样poll返回后需要轮询pollfd来获取就绪的描述符。 从上面看select和poll都需要在返回后通过遍历文件描述符来获取已经就绪的socket。事实上同时连接的大量客户端在一时刻可能只有很少的处于就绪状态因此随着监视的描述符数量的增长其效率也会线性下降。 poll还有一个特点是“水平触发”如果报告了fd后没有被处理那么下次poll时会再次报告该fd。 poll的缺点 每次调用select都需要把fd集合从用户态拷贝到内核态这个开销在fd很多时会很大 每次调用select都需要在内核遍历传递进来的所有fd查看有没有就绪的fd这个开销在fd很多时也很大效率随FD数目增加而线性下降 poll跟select对比的优点 解决了select的第一个缺点poll没有最大文件描述符数量的限制 epoll epoll是在2.6内核中提出的是之前的select和poll的增强版本。相对于select和poll来说epoll更加灵活没有描述符限制。epoll使用一个文件描述符管理多个描述符将用户关心的文件描述符的事件存放到内核的一个事件表中这样在用户空间和内核空间的copy只需一次。 epoll显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率因为它会复用文件描述符集合来传递结果而不用迫使开发者每次等待事件之前都必须重新准备要被监听的文件描述符集合另一点原因就是获取事件的时候它无须遍历整个被侦听的描述符集只要遍历那些被内核IO事件异步唤醒而加入就绪队列的描述符集合就行了。 epoll操作过程 epoll操作过程需要三个接口分别如下 int epoll_create(int size) int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event) int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout); int epoll_create(int size);创建一个epoll的句柄参数size并不是限制了epoll所能监听的描述符最大个数只是对内核初始分配内部数据结构的一个建议。 当创建好epoll句柄后它就会占用一个fd值在linux下如果查看/proc/进程id/fd/是能够看到这个fd的所以在使用完epoll后必须调用close()关闭否则可能导致fd被耗尽。int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event) 函数是对指定描述符fd执行op操作。 epfd是epoll_create()的返回值。 op表示op操作用三个宏来表示添加EPOLL_CTL_ADD删除EPOLL_CTL_DEL修改EPOLL_CTL_MOD。分别添加、删除和修改对fd的监听事件。 fd是需要监听的fd文件描述符 epoll_event是告诉内核需要监听什么事struct epoll_event结构如下 struct epoll_event {__uint32_t events; /* Epoll events */epoll_data_t data; /* User data variable */ };//events可以是以下几个宏的集合 EPOLLIN 表示对应的文件描述符可以读包括对端SOCKET正常关闭 EPOLLOUT表示对应的文件描述符可以写 EPOLLPRI表示对应的文件描述符有紧急的数据可读这里应该表示有带外数据到来 EPOLLERR表示对应的文件描述符发生错误 EPOLLHUP表示对应的文件描述符被挂断 EPOLLET 将EPOLL设为边缘触发(Edge Triggered)模式这是相对于水平触发(Level Triggered)来说的。 EPOLLONESHOT只监听一次事件当监听完这次事件之后如果还需要继续监听这个socket的话需要再次把这个socket加入到EPOLL队列里 int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout); 等待epfd上的io事件最多返回maxevents个事件。参数events用来从内核得到事件的集合maxevents告之内核这个events有多大这个maxevents的值不能大于创建epoll_create()时的size参数timeout是超时时间毫秒0会立即返回-1将永久阻塞直到有监听的io事件发生。该函数返回需要处理的事件数目如返回0表示已超时。 epoll工作模式: epoll对文件描述符的操作有两种模式LTlevel trigger和ETedge trigger。LT模式是默认模式LT模式与ET模式的区别如下 LT模式当epoll_wait检测到描述符事件发生并将此事件通知应用程序应用程序可以不立即处理该事件。下次调用epoll_wait时会再次响应应用程序并通知此事件。 ET模式当epoll_wait检测到描述符事件发生并将此事件通知应用程序应用程序必须立即处理该事件。如果不处理下次调用epoll_wait时不会再次响应应用程序并通知此事件。 epoll的跟select和poll对比的优点 支持一个进程打开大数目的socket描述符。它所支持的FD上限是最大可以打开文件的数目这个数字一般远远于2048具体数目可以cat /proc/sys/fs/file-max察看,一般来说这个数目和系统内存关系很大。select和poll每次调用都需要把所有要监听的fd重新拷贝到内核空间epoll只在调用epoll_ctl时拷贝一次要监听的fd调用epoll_wait时不需要每次把所有要监听的fd重复拷贝到内核空间。IO效率不随FD数目增加而线性下降。传统的select/poll另一个致命弱点就是当你拥有一个很大的socket集合任一时间只有部分的socket是”活跃”的但是select/poll每次调用都会线性扫描全部的集合导致效率呈现线性下降。但是epoll不存在这个问题它只会对”活跃”的socket进行操作。这是因为在内核实现中epoll是根据每个fd上面的callback函数实现的。那么只有”活跃”的socket才会主动的去调用callback函数其他idle状态socket则不会。 总结 Select、Poll与Epoll区别 select有最大文件描述符数量限制pollepoll则没有最大文件描述符数量限制。selectpoll每次调用都要把fd集合从用户态往内核态拷贝一次并且要把current往设备等待队列中挂一次而epoll只在调用epoll_ctl时拷贝一次而且把current往等待队列上挂也只挂一次在epoll_wait的开始注意这里的等待队列并不是设备等待队列只是一个epoll内部定义的等待队列。这也能节省不少的开销。selectpoll实现需要自己不断轮询所有fd集合直到设备就绪期间可能要睡眠和唤醒多次交替。而epoll其实也需要调用epoll_wait不断轮询就绪链表期间也可能多次睡眠和唤醒交替但是它是设备就绪时调用回调函数把就绪fd放入就绪链表中并唤醒在epoll_wait中进入睡眠的进程。虽然都要睡眠和交替但是select和poll在“醒着”的时候要遍历整个fd集合而epoll在“醒着”的时候只要判断一下就绪链表是否为空就行了这节省了大量的CPU时间。这就是回调机制带来的性能提升。如果没有大量的idle-connection或者dead-connectionepoll的效率并不会比select/poll高很多但是当遇到大量的idle-connection就会发现epoll的效率大大高于select/poll。
http://www.zqtcl.cn/news/436036/

相关文章:

  • 常州 网站制作如何找专业的网站建设公司
  • 陕西网络营销优化公司seo搜索价格
  • 山东通信局报备网站东营城镇建设规划网站
  • 建设银行如何招聘网站网站开发转包协议
  • 主流网站建设服务器有哪些电商平台
  • 网站与数据库的联系wordpress改为中文
  • 如何不让百度收录网站wix和wordpress比较
  • php开源网站 网上商城网站建设公司做销售好不好
  • 网站开发学哪种语言网站加水印
  • 帮人家做网站维护女性手机网站模板
  • 给一个企业做网站苏州网站备案查询
  • 域名备案期间怎么做网站广告投放行业
  • wordpress站内搜索统计网站突然不收录了
  • 网站源码小千个人网做网页设计一个月能挣多少
  • 贵州省建设厅公示网站广州seo网站推广费用
  • 旅游网站建设前期分析公众号制作多少钱
  • 延庆长沙网站建设怎样下载门户网站
  • flash 网站建设建设带数据搜索的网站
  • 设计网站网站名称云主机 小型网站
  • 网站建设方案书 模版公司制作网站收费标准
  • 福州企业网站html模板网站模板下载
  • 湛江自做网站城乡住建局官网
  • 广东网站建设找自己做网站还有出路吗
  • wordpress后台管理地址更改班级优化大师怎么用
  • 电脑网站开发学习产品怎么做市场推广
  • 上海市网站建设公叿目前流行的app网站开发模式
  • 企业手机网站建设效果wordpress栏目链接地址
  • 产品经理做网站网络公司名字免费起名大全
  • 做得比较好的公司网站kol营销
  • 百度指数分析平台长春seo优化企业网络跃升