【Java】BIO NIO 服务器

来源:互联网 发布:keynote 模板 知乎 编辑:程序博客网 时间:2024/05/25 20:01

BIO,即所谓的面向字节的api。

基本的思路是每一个连接对应一个线程。所以accept以后,就会新建一个线程来处理这个socket。线程里面也是一个while,读取客户端请求,然后相应。这种设计思路很清晰,写起来比较顺,但是性能在高并发的时候有问题,主要是线程太吃资源,但是在低并发情况下还是不错的。

一个改进就是采用线程池,这样可以限制线程数目,只有前面的一些客户端关闭了连接,释放了线程,那么这个线程才能处理其他的连接。


NIO,是java的非阻塞io api。

可以采用一个线程处理多个io。这种模式可以应对高并发,但是编程难度较大,因为一次请求响应被分为了两个周期来处理,所以复杂情况下,需要一些全局的队列来缓存一些东西。事件方面主要有连接和读写两种。每一次注册都有一个key和channel关联,一旦有事件,key会被返回,key里面有发生的事件。每一次处理需要移除key。同时,可能需要修改key里所关心的事件类型。