• select和epoll


    什么是select,它的工作原理,优缺点?
    select是多路复用模型下的一个模块,
    工作原理:
    通过调用select,向内核拷贝fd(文件描述符),
    内核监视select下的所有套接字,会遍历所有套接字,查看是否有事件发生,
    没有事件发生则睡眠,直到有事件发生,或者timeout时间到了后,唤醒,再次遍历,
    内核一旦查看到有事件发生,则返回遍历后的fd,
    将fd从内核拷贝到用户空间,用户进程再根据fd遍历一遍,找到发生事件的套接字
    优点:使服务端达到并发的效果,只用到单线程,所用的cpu资源少,减少了网络io堵塞
    缺点:
    1,遍历的fd在linux上有数量限制,1024个
    2,fd从用户态拷贝到内核态,每次都需要复制,产生巨大的开销
    3.对fd的扫描形式是一种遍历的方式,要找到发生的事件必须从头开始扫,
    对没有发生事件的fd做了大量无用功.

    什么是epoll,工作原理,优缺点?
    epoll是linux系统提供的多路复用模块
    工作原理:
    epoll模块提供了三个函数调用,分别是epoll_creat,epoll_ctl,epoll_wait
    调用epoll_create,创建红黑树,和就绪链接表
    调用epoll_ct,若要添加新的句柄,如果存在则返回,
    不存在则添加到树干上,然后向内核注册回调函数,
    当事件发生的时候,可以往就绪链接表中插入数据
    调用epoll_wait,查看就绪链接表中有没有就绪的fd,
    如果有则返回就绪的fd数目,通过mmap(内存映射技术)得到相应的文件描述符,
    没有则睡眠,直到有就绪的fd或者timeout时间到了
    优点:
    1,没有最大的fd限制,只受到服务端内存大小的限制
    2.效率提升,只有句柄中有事件发生,就会调用回调函数,把相应的fd放到就绪链接表中,
    不用从头开始遍历fd,
    3.省去了不必要的内存拷贝,如mmap技术
    缺点:
    当fd数量较少时,epoll的速度不见得比select的速度快
    对于单个连接,不存在优势

  • 相关阅读:
    B
    Labyrinth 树的直径加DFS
    Speech to Text for iOS
    苹果开发者:Siri未开放API 有些让人失望
    ios6.0 siri语音识别
    Sample example for Speech to Text in iOS
    iOS升级经验分享
    苹果放宽了 iOS 5.0 对应用本地存储的限制
    iOS5可能会删除本地文件储存
    iOS 5 does not allow to store downloaded data in Documents directory? ios5.0及以后的版本对于下载的文件存储路径有了改变
  • 原文地址:https://www.cnblogs.com/wengxiaobin/p/11630069.html
Copyright © 2020-2023  润新知