BIO NIO AIO三种IO模型的区别是什么? | Java Debug 笔记

190 阅读3分钟

一 故事背景

最近乐乐开始学习了Netty,但是他发现了一个问题,Netty是啥?
于是百度了一下

Netty 是一个基于NIO的客户、服务器端的编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户、服务端应用。

嗯,写的很好,但是,没看懂... 于是乐乐找到一些资料,发现学习Netty要从基本的IO模型入手,于是乐乐开始学习IO模型,也做了一些笔记

二 IO模型

  1. BIO

    BIO是同步阻塞模型,啥叫同步阻塞呢,乐乐总结了下自己的理解,首先要把同步和阻塞拆开

    先说同步,客户端向服务端发消息,服务端会接收客户端的消息,但是一次只能接收一条,而其他的就要排队,就是我们经常使用的队列,要把消息放到队列中。然后队列中其他的消息,要等上一个任务执行完才能被执行。 然后说异步,异步就是不需要上一个任务执行完就执行下一个任务,这个就挺简单的.

    继续说阻塞,阻塞是啥呢,阻塞是cpu级别的,cpu上面有不少线程,阻塞就是就用一个线程处理,其他线程都闲着,而非阻塞就是,一个cpu线程处理不过来,就让其他的cpu线程帮忙。

    这下大概明了了,BIO 同步阻塞 就是一个请求过来之后呢,后面的要排队,然后这个请求到cpu了呢,cpu就给他一个线程。想起来还是挺简单的,但是如果出现多个请求过来,就要gg了。解决这种方式只能通过开多线程来处理,但是线程开多了也是费性能。

  2. NIO

    NIO这小子有两下子,他是个啥呢? 他是同步 非阻塞线程,意思是在客户端发送请求还得排队,但是到了服务端,他会让cpu努力工作起来,cpu上本身有很多线程,NIO就会对cpu说,来了老弟们,我是你们的老铁,然后cpu上的其他线程也行动起来,帮NIO解决并发问题,于是乎大大提升了性能。但是也不是全能解决,当并发量大了也会有一些问题

  3. AIO

    他是异步非阻塞的,使用场景呢,就比如一个服务发了一个请求,这个请求一部分是要执行功能,一部分呢,要写入日志,这回就是用到他了。听起来很高大上,但是实际工作中呢,异步是由风险的,也是不安全的。所以AIO的使用还是很需要谨慎的。

三 结语

其实框架都是在基础技术基础上建立的,如果对基础了解不深,那么对框架的学习也不会深入,所以要打好基础,不能操之过急。