前言
- io是java知识的核心点,只有通过通信连接起来的io才叫互联网。
- 分析io,nio, aio的优点和缺点,使用场景。
典型场景
- 构建一个应用服务器,能够支持多个客户端连接
- 这样一个场景,我们首先想到的就是使用ServerSocket构建同步阻塞服务,特征是为每一个连接创建一个线程,并且阻塞等待连接和连接完毕,劣势:消耗大量的线程,这些线程是需要分配存储空间的,当连接数量不断增大,对服务资源的消耗是非常大的。
- 假设现在在服务端使用线程池,根据连接的不断变化订台改变线程数量,这样呢,但是即使是线程池也有线程切换的开销,大量线程之间的切换对于高并发的服务器来说也会带来巨大的资源消耗。
- 第三种,也就是nio,我们前面介绍的都是同步阻塞模式,而nio是同步非阻塞模式,比较重要的概念是Selector, channel等概念,只有Selector会阻塞,服务端真正处理的线程只有一个。这样完美的避免了多线程内存分配和线程间切换带来的开销问题。
- 第四种,aio,异步非阻塞,异步就是不需要等待上一步操作返回,而是采用事件,异步的方式,来构建操作顺序,而不是通过时间顺序
网友评论