netty杂记一

前言:最近维护一个项目,用到了netty框架,学习java断断续续有了大半年了,没怎么学习过java框架,所以准备去学习netty框架,其中有网上的总结和自己的理解,有错的地方,请多多指教。

netty是基于java nio来写的java开源框架,可以用来开发高性能,高并发的阻塞或者非阻塞网络应用程序,包括客户端和服务器。了解一点nio可以更好的理解netty框架。

java nio是new io的简称,与io比较的话,io是面向流的,是阻塞的,而nio是面向缓冲的,是非阻塞的。nio核心的部分是channel(通道),buffer(缓冲),selector(选择器)


面向流与面向缓冲

一般的io都是面向流的,除了udp操作,为什么这么说呢, 大家可以去看一下http://blog.csdn.net/kelindame/article/details/44759791,可以有个大概的印象。面向流的话,意味 着每次从流中读数据时,可以读一个或者多个字节,直到读完。写数据的话是直接写到流中。面向缓冲的话,是通过通道将数据读到一个缓冲区,然后线程从缓冲去读取数据。写数据时,线程将数据写到缓冲区,然后在从缓冲区写到通道中。这样做的好处是在处理数据时,数据在缓冲区中可以前后移动,提高了灵活性。


阻塞与非阻塞

io阻塞,意味着当线程去调用read()或者write()函数时,该线程被阻塞,直到写完数据或者有数据可以读,在等待读数据或者写数据期间,该线程不能干任何事情。nio非阻塞模式是说线程通过通道读取数据时,可以读取缓冲区现在拥有的数据,假如没有数据的话,就什么都不做,或者干其他事情,而不会被阻塞。写数据也是一样,线程将数据写入通道时,不需要等待它完全写入,同时可以去干别的事情。


selector可以更好的提高非阻塞的效率。它的作用就是管理多个通道。首先是多个通道注册到selector中,然后线程通过selector看哪个空闲的channel可以写入或者要读取的有数据的channel。


上面只是了解nio,以帮助我理解netty,假如要深入理解java nio的话,可以看Java NIO系列教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值