深入理解java nio Java中BIO,NIO和AIO的区别和应用场景?
Java中BIO,NIO和AIO的区别和应用场景?AIO完全是异步通信。NiO是同步无阻塞通信。有一个典型的例子。把水烧开。假设有一个场景,有一排水壶(顾客)在烧开水。AIO的做法是,每个水壶都配有一
Java中BIO,NIO和AIO的区别和应用场景?
AIO完全是异步通信。NiO是同步无阻塞通信。有一个典型的例子。把水烧开。假设有一个场景,有一排水壶(顾客)在烧开水。AIO的做法是,每个水壶都配有一个开关,当水沸腾时,开关会提醒相应的线程处理。NiO的方法是让线程连续观察每个水壶,并根据每个水壶的当前状态对其进行处理。Bio的方法是让线程留在一个水壶中,直到水壶沸腾,然后再处理下一个水壶。由此可见,AIO最聪明也最省力,NiO相对省力,一个人能看到所有的锅,bio最笨,劳动力低。
为什么nio效率会比bio高?
核心是合理利用硬件提供的功能。NiO只需要CPU在通道的帮助下参与IO的开始和结束,其他时段的控制权转移到通道,直接在磁盘和内存之间交换数据;bio需要CPU中的寄存器参与数据传输;如果是直接访问模式,CPU还需要轮询检查,而中断驱动模式也需要在字传输后进行检查。总之,NiO通过将CPU控制权委托给通道,减少了中断,不参与数据传输,提高了数据处理速度。