技术原理思考20190904

先记录几个问题,今天把详细答案整理出来

一、netty底层使用的是epoll,还有其他的poll,select,他们直接的区别是什么?

https://www.cnblogs.com/Anker/p/3265058.html

epoll是poll和select的加强版,poll和select主要是对fd的描述不同,epoll解决了poll和select的三个缺点,第一.直接将fd注册在内核里面,只需要一次从用户态到内核态的拷贝;第二.select和poll每次调用的时候,都会遍历fd列表,检查就绪状态,而epoll则只需要通过epoll_ctl将fd绑定在设备等待队列上,并设置回调事件,当设备准备继续时,调用回调函数,将fd放在就绪链表上。当调用epoll_timeout的时候,就直接获取就绪的fd,而不用去遍历所有的fd了。第三个是没有fd大小限制。

二、使用dubbo协议和hession2协议,进行200k数据传输的时候,性能反而没有http协议和rmi协议快,原因是什么?

 

三、线程切换会有开销,具体是什么样的开销?

 

四、linux为什么要分为内核态和用户态,内核态包括哪些,用户态包括哪些内容?

 

五、fd是啥东西?

转载地址

 linux中, 每一个进程在内核中,都对应有一个“打开文件”数组,存放指向文件对象的指针,而 fd 是这个数组的下标

我们对文件进行操作时,系统调用,将fd传入内核,内核通过fd找到文件,对文件进行操作。

    既然是数组下标,fd的类型为int, < 0 为非法值, >=0 为合法值。在linux中,一个进程默认可以打开的文件数为1024个,fd的范围为0~1023。可以通过设置,改变最大值。

    在linux中,值为0、1、2的fd,分别代表标准输入、标准输出、标准错误输出。在上一篇文章中,使用重定向 2>/dev/null 就是把标准错误输出重定向到位桶中去,不显示出来。因为 0 1 2已经被linux使用了,通常在程序中打开的fd,是从3开始的。但我们在判断一个fd是否合法时,依然要使用>=0的判断标准。

    fd的分配原则,是从小到大,找到第一个不用的进行分配。

    除了open之外, socket编程的socket()/accept()等函数,也会返回一个fd值。

    1)Linux系统下,所有进程允许打开的最大fd数量。查询语句:

        /proc/sys/fs/file-max
    2)Linux系统下,所有进程已经打开的fd数量及允许的最大数量。查询语句:

        /proc/sys/fs/file-nr
    3)单个进程允许打开的最大fd数量.查询语句:

        ulimit -n
    4)单个进程(例如进程id为5454)已经打开的fd.查询语句:

        ls -l /proc/5454/fd/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值