java通信模型
BIO通信模型(同步阻塞IO 1—>1)
一个独立的Acceptor线程负责监听客户端的连接,为每个客户端创建一个新的线程进行处理,处理完返回结果并销毁线程(一请求一应答),线程是java虚拟机宝贵的系统资源,线程数增加系统性能集聚下降,再增加访问量会出现线程堆栈溢出,线程创建失败的问题,导致‘进程’死掉。
伪异步IO通信(同步阻塞IO m—>n)
有一个线程池,m个客户端来了以后该线程池的消息队列中最大只能有n个线程,无论多少个客户端并发访问都不会导致资源耗尽和宕机,但是会造成线程池阻塞,比BIO强在不会创建多个线程
NIO通信(同步非阻塞IO m—>1)
通过缓冲区Buffer对象进行操作。所有数据都是缓冲区处理的,读到缓冲区,写到缓冲区,读写完数据还存在Buffer,区别于String:读写完数据就没有了。网络数据通过通道Channel读取和写入,通道是双向的,可以读写二者同时进行,流是单向的(输入输出流)。一个服务端有一个selector,为一个客户端创建一个Channel,线程去访问Channel
AIO通信(异步非阻塞IO m—>0)
主动通知程序,读写方法异步(不懂),简化了NIO的编程模型
Netty是业界最流行的NIO框架之一,用Netty来构建高性能的异步通信能力
推荐的线程模型: