一 故事背景
最近乐乐开始学习了Netty,但是他发现了一个问题,Netty是啥?
于是百度了一下
Netty 是一个基于NIO的客户、服务器端的编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户、服务端应用。
嗯,写的很好,但是,没看懂... 于是乐乐找到一些资料,发现学习Netty要从基本的IO模型入手,于是乐乐开始学习IO模型,也做了一些笔记
二 IO模型
-
BIO
BIO是同步阻塞模型,啥叫同步阻塞呢,乐乐总结了下自己的理解,首先要把同步和阻塞拆开
先说同步,客户端向服务端发消息,服务端会接收客户端的消息,但是一次只能接收一条,而其他的就要排队,就是我们经常使用的队列,要把消息放到队列中。然后队列中其他的消息,要等上一个任务执行完才能被执行。 然后说异步,异步就是不需要上一个任务执行完就执行下一个任务,这个就挺简单的.
继续说阻塞,阻塞是啥呢,阻塞是cpu级别的,cpu上面有不少线程,阻塞就是就用一个线程处理,其他线程都闲着,而非阻塞就是,一个cpu线程处理不过来,就让其他的cpu线程帮忙。
这下大概明了了,BIO 同步阻塞 就是一个请求过来之后呢,后面的要排队,然后这个请求到cpu了呢,cpu就给他一个线程。想起来还是挺简单的,但是如果出现多个请求过来,就要gg了。解决这种方式只能通过开多线程来处理,但是线程开多了也是费性能。
-
NIO
NIO这小子有两下子,他是个啥呢? 他是同步 非阻塞线程,意思是在客户端发送请求还得排队,但是到了服务端,他会让cpu努力工作起来,cpu上本身有很多线程,NIO就会对cpu说,来了老弟们,我是你们的老铁,然后cpu上的其他线程也行动起来,帮NIO解决并发问题,于是乎大大提升了性能。但是也不是全能解决,当并发量大了也会有一些问题
-
AIO
他是异步非阻塞的,使用场景呢,就比如一个服务发了一个请求,这个请求一部分是要执行功能,一部分呢,要写入日志,这回就是用到他了。听起来很高大上,但是实际工作中呢,异步是由风险的,也是不安全的。所以AIO的使用还是很需要谨慎的。
三 结语
其实框架都是在基础技术基础上建立的,如果对基础了解不深,那么对框架的学习也不会深入,所以要打好基础,不能操之过急。