zoukankan      html  css  js  c++  java
  • select的问题以及epoll的使用

    select的问题

    1. 当进程被唤醒时,不清楚到底哪个socket有数据,只能遍历一遍
    2. 每一次select的执行,都需要将这进程,再加入到等待队列中
    3. 为了重复添加等待队列,当每一次操作完成时,也需要从等待队列中删除进程

    所以select最大的限制被设置为了1024,如此看来select连多线程都比不上

    于是就推出了poll和epoll

    poll

    • 简单的对select进行了优化,但依旧不够完美,过渡使用,epoll才是最后的解决方案

    epoll

    • epoll只能在linux中使用,因为这和操作系统相关

    中断程序会将内核的数据copy到socket缓冲区,然后唤醒socket的等待队列,就是epoll,epoll又会唤醒进程A

    epoll维护了一个就绪队列

    socket数据准备好的时候会执行一个回调函数,将自己的地址交给epoll

    epoll将其添加到就绪列表中,即可

    进程A只需要访问epoll的就序列带能够获取到就绪的socket对象

    没懂

    epoll如何解决select的两个问题

    1. epoll把对于等待队列的操作,与阻塞进程分开了
    2. epoll自己维护了一个等待列表,避免了遍历所有的socket
  • 相关阅读:
    支持向量机SVM知识点概括
    决策树知识点概括
    HDU 3081 Marriage Match II
    HDU 3572 Task Schedule
    HDU 4888 Redraw Beautiful Drawings
    Poj 2728 Desert King
    HDU 3926 Hand in Hand
    HDU 1598 find the most comfortable road
    HDU 4393 Throw nails
    POJ 1486 Sorting Slides
  • 原文地址:https://www.cnblogs.com/lucky75/p/11167453.html
Copyright © 2011-2022 走看看