传统IO的缺点
以socket通信为例
通常服务端用线程来处理客户点请求 一个客户连接一个线程
对于请求特别多的服务 会产生大量线程
jvm会为每个线程分配固定大小的堆栈空间,线程越多 消耗内存越多
采用线程池可使线程重用,但io阻塞导致jvm频繁转让cpu使用权,浪费许多时间
理解非阻塞
当操作还没就绪时就返回,而不是在傻傻的等
如inputStream.read();
如果没有数据可读就返回,或者没有足够数据则读取现有数据然后返回
以socket通信为例
通常服务端用线程来处理客户点请求 一个客户连接一个线程
对于请求特别多的服务 会产生大量线程
jvm会为每个线程分配固定大小的堆栈空间,线程越多 消耗内存越多
采用线程池可使线程重用,但io阻塞导致jvm频繁转让cpu使用权,浪费许多时间
理解非阻塞
当操作还没就绪时就返回,而不是在傻傻的等
如inputStream.read();
如果没有数据可读就返回,或者没有足够数据则读取现有数据然后返回