开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第16天,点击查看活动详情
如何netty这么牛
异步非阻塞通信
我们知道java从1.4开始开始NIO,原来的BIO暴露出来的问题也很多,比如内存浪费,线程阻塞等问题
JDK1.4 提供了对非阻塞 IO(NIO)的支持,JDK1.5使用 epoll 进行了优化,之前 select虽然已经实现了多路复用的思路,但是理论上还是有线程在不断循环等待,而epoll 则是底层实现的事件监测。
零拷贝
-
JVM中非配的内存空间,我们在进行数据通信的时候的还是需要将数据复制到当前的内存。这就存在一个问题,虽然数据在内存上,但是在数据操作方面我们还存在一个复制的操作这就是性能的一个瓶颈。
-
而netty提供的bytebuffer就是打破这个问题的,我们就直接采用直接内存的方式存储数据的,这就不存在复制数据的情况。性能肯定就提高了。
-
还有一种情况是我们之前在操纵数据的时候会以一个最小数据单元进行数据传输,这涉及到数据的打散与重组的情况。net t y也提供了一个组合bytebuffer的方法, 这样我们就无需要考虑数据重组的情况,极大的方便了我们开发者。
-
总之不管对于性能还是我们开发者,netty都做到了极好的兼顾。
文件传输
- netty 既然是cs模式主流场景,那么必然涉及到文件传输的情况,比如我们使用dubbo的时候隔离接口,但是有的时候文件上传需要调用统一的服务接口,这饿时候必然就涉及到文件传输。我们可以通过id化文件的方式解决问题,但是有的时候文件服务器和我门完全是隔离状态,这个时候就必须进行文件传输。
- 而net t y的文件传输是
transferto, 他可以直接将文件存放在缓冲区,避免数据的传输导致内存占用的问题了。