美文网首页我爱编程
系统io模型 epoll(复制,记录) 2018-06-21

系统io模型 epoll(复制,记录) 2018-06-21

作者: 夏树的宝马 | 来源:发表于2018-06-21 15:10 被阅读29次

    查看进程能够打开的最大数目的文件描述符
    cat /proc/sys/fs/file-max
    修改最大文件描述符限制
    vim /etc/security/limits.conf

    问题:
    一个进程在 linux 上能打开的文件句柄数是有限的,因为内核用 16位的 short 来表示文件句柄数,那么最大值是不是 65536 呢?
    而accept一个socket连接,也是要在系统本地创建一个文件的,就占用了这个 socket server 进程的一个文件句柄,这样算下来,一个进程是不是理论上最多就能保持 65536个长连接呢(1024 以下一般保留)?
    一个 jvm 上启动一个java的socket server 应该算是一个系统进程吧?那么这个进程是怎么维持 65536 以上的长连接的呢?

    某网友的回答:
    nio 在linux上使用的是epoll ,epoll支持在一个进程中打开的FD是操作系统最大文件句柄数,而不是你所说的16位short表示的文件句柄。 而 select模型 单进程打开的FD是受限的 select模型默认FD是1024 。操作系统最大文件句柄数跟内存有关,1GB内存的机器上,大概是10万个句柄左右。可以通过cat /proc/sys/fs/file-max 查看


    epoll把用户关心的文件描述符上的时间放在内核的一个事件表中,无需像select和poll那样每次调用都重复传入文件描述符集。
    epoll在获取事件的时候,无需遍历整个被监听的文件描述符集合,而是遍历那些被内核IO事件异步唤醒而加入ready队列的描述符集合。

    参考文章:
    https://blog.csdn.net/men_wen/article/details/53456491
    https://blog.csdn.net/u014252563/article/details/51531514

    相关文章

      网友评论

        本文标题:系统io模型 epoll(复制,记录) 2018-06-21

        本文链接:https://www.haomeiwen.com/subject/heiqyftx.html