zoukankan      html  css  js  c++  java
  • select poll epoll总结区别

    最下边是别人的文章,写的非常好。其中有几点摘出来再细说下:

    select  poll归为一类说:

    1.select和poll区别是文件描述符数量多少差别,select 用数组记录套接字,poll用的链表。本质没啥区别的。找几个代码例子就能看出来。

    2.select和poll相同点,都是轮循,比如有1000个需要监控的TCP连结,同一时间活跃的有10个,那么他们会把1000个套接字标志传到内核,内核遍历1000遍,发现有10个活跃的,修改这10个套接字中状态为可读。然后再传到用户进程遍历1000遍,看看哪个套接字对的状态为可读的。

    可以看出,效率低的2点: (1)每次循环3000次,(2)每次拷贝2000个

    3.关于这一点:s触发方式是水平触发,应用程序如果没有完成对一个已经就绪的文件描述符进行IO操作,那么之后每次调用还是会将这些文件描述符通知进程。

    做游戏服务器的一般不存在这点。

    epoll 归为一类,是如何解决select和poll 效率低的问题呢?

    1.epoll监控tcp连接用的红黑树,添加到内核后,不需要再次添加重复连接。如果继续用上边的数据例子,那么(1)一共循环1000 Log1000 ,加上 每次活跃的 10个  (2)每次拷贝10个

    2.每帧检测活跃的套接字会放到双列表里,送到用户进程也就10个

    深度理解select、poll和epoll_傻眼哥的博客-CSDN博客

    如果这篇文章说不清epoll的本质,那就过来掐死我吧! (1) - 知乎 (zhihu.com)

    当你看完这两篇文章时回答这几个问题:

    1.当网络数据到达时,网卡发送中断信号给CPU,然后进行数据分类拷贝到对应的套接字,然后唤醒进程A。问题:怎么知道这个套接字属于哪个进程呢?或者说CPU怎么知道应该唤醒进程A,而不是B呢?

  • 相关阅读:
    Android 课程设计
    第十个作业 简易通讯录
    第九个作业 QQ的账号密码保存
    第八个作业 QQ账号的保存
    第七个作业 Activity之间的数据回传
    第六个作业 应用列表
    第五个作业 背景换色
    JSP第一次作业
    安卓课设
    Android第八次作业
  • 原文地址:https://www.cnblogs.com/workharder/p/14864369.html
Copyright © 2011-2022 走看看