学习任何东西之前都得知道他是为什么而产生的。任何一个设计,或技术。都是为了解决某个或多个问题而产生的。即BIO到NIO到多路复用再到epollo 再到netty网络编程框架。今天我们来看看这个演进的过程。
下图是来自培训机构的一个大佬的图:
1.顺序访问:这种情况下,内存访问速度仅仅是硬盘访问速度的6~7倍(358.2M / 53.2M = 6.7)
2.随机访问:这种情况下,内存访问速度就要比硬盘访问速度快上10万倍以上 (36.7M / 316 = 113,924)
在看各个IO之前先理解一下这个过程linux是如何实现的: 在linux系统中一切皆文件。在 系统中启动一个服务的时候,我们会为其定义端口号代表这个服务,启动成功后linux就会创建一个监听,每接入一个clinet就会被我们的服务监听到,然后去内核拿这个数据。 重要的就是图中的fd(文件描述符)和内核交互的过程中就是根据linux系统中的这个文件描述符来确定是那个客户端的。
如图上红色线的部分。我们监听到有个client进来的时候,于是我们起一个线程去请求是否有数据进来,此时这个阶段是阻塞的,没有数据返回就会一直等待。当又有新的客户端进来的时候我们只能再起新的进程了。那就使用多线程的方式再起新的线程去请求。
大概是过了一下从BIO到NIO+IO多路复用的演进(IO模型的演进)
资源: