Netty学习之旅(一)

随着技术的发展,我们需要学习的也更多了。对于中国这么大的市场,高并发一直是个需要配攻克的难题。这里我开始学到了解到了Netty,从今天起,就开始我们的Netty学习之旅。

 

在了解Netty之前

我们首先要理清IO和NIO(netty是基于NIO)。

 

IO

传统IO:在单线程的情况下只能有一个客户端,但是用到线程池可以实现多个客户端,这样会消耗大量的内存。

 

NIO

面向缓冲区的(BUFFER)

NIO的核心就是Selector,读懂了Selector就理解了异步机制的实现原理,下面先来简单的介绍一下什么是Selector。现在对于客户端的每一次请求到来时我们不再立即创建一个线程进行处理,相反以epool为例子当一个事件准备就绪之后通过回调机制将描述符加入到阻塞队列中,下面只需要通过遍历阻塞队列对相应的事件进行处理就行了,通过这种回调机制整个过程都不需要对于每一个请求都去创建一个线程去单独处理。上面的解释还是有些抽象,下面我会通过具体的代码实例来解释,在这之前我们先来了解一下NIO中两个基础概念Buffer和Channel。

 

利用NIO,当我们读取数据的时候:bufferèchannel

当我们写入数据的时候:channerèbuffer

Channel的话分为四种:

1.     FileChannel从文件中读写数据。

2.     DatagramChannel以UDP的形式从网络中读写数据。

3.     SocketChannel以TCP的形式从网络中读写数据。

4.     ServerSocketChannel允许你监听TCP连接。

 

这里我们有两个方法:channel.read(buffer)可以将channel的数据写入到buffer中

       Buffer.write(channel)则是键buffer的数据写入到channel中

 

在NIO中,通过使用selector,我们可以通过一个线程来同时管理多个channel(这省去了创建线程以及线程之间进行上下文切换的开销)。

 

创建selector:

       Selector selector = Selector.open();

注册channel:
       为了保证selector能够监听多个channel,我们需要将channel注册到selector当中

       channel.configureBlocking(false);

       SelectionKey key = channel.register(selector.selectionkey.OP_READ);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值