netty
Lin大坑haha~
这个作者很懒,什么都没留下…
展开
-
边缘触发的问题:不必要的唤醒以及饥饿
1)不必要的唤醒:1.内核:收到第一个连接请求。线程 A 和 线程 B 两个线程都在 epoll_wait() 上等待。由于采用边缘触发模式,所以只有一个线程会收到通知。这里假定线程 A 收到通知2.线程A:epoll_wait() 返回3.线程A:调用 accpet() 并且成功4.内核:此时 accept queue 为空,所以将边缘触发的 socket 的状态从可读置成不可读5.内核:收到第二个建连请求6.内核:此时,由于线程 A 还在执行 accept() 处理,只剩..原创 2021-11-23 13:51:54 · 1709 阅读 · 0 评论 -
Netty相比JAVA NIO——学习笔记
总所周知,netty是脱胎于java nio的。总是会被问到,为什么要使用netty呢?1.支持应用层协议2.粘包、半包的问题解决,nio需要自己编写代码解决3.完善的断连、空闲的情况处理4.API更友好、强大,屏蔽了和很多nio的使用细节5.如果自己使用nio实现一样的功能,需要解决自己很多问题。nio bug1.epoll 异常唤醒空转导致cpu 100%netty怎么解决这...原创 2020-02-13 12:00:34 · 306 阅读 · 0 评论 -
netty epoll学习笔记
wakeup callback机制Linux通过socket的睡眠队列(sleep_list)来管理所有等待socket的某个事件的进程(task), select、poll、epoll_wait 函数操作会陷入内核,判断监控的socket是否有关心的事件发生了,如果没,则为当前task构建一个wait_entry节点,然后插入到每个socket的sleep_list里,直到超时或事件发生,同时...原创 2019-11-15 11:14:08 · 237 阅读 · 0 评论 -
netty 零拷贝学习笔记
Netty中的零拷贝与我们传统理解的零拷贝不太一样。传统的零拷贝指的是数据传输过程中,不需要CPU进行数据的拷贝。主要是数据在用户空间与内核中间之间的拷贝。发送数据时的实现方法啊File.read(bytes)Socket.send(bytes)这种方式需要四次数据拷贝和四次上下文切换:数据从磁盘读取到内核的read buffer数据从内核缓冲区拷贝到用户缓冲区数据从用户缓冲...原创 2019-11-09 13:14:54 · 101 阅读 · 0 评论