如何一探究竟:select、epoll等五大IO模型的前世今生?
- 内容介绍
- 文章标签
- 相关推荐
展开全文存储的概念由来已久。很早之前,计算机之父--冯·诺依曼在提出计算机模型的五大部分中就提到存储器。可以说,没有存储器,计算机也是不完整的。 按照电源关断后数据是否依旧被保存,可以划分为非易失性存储器和易失性存储器两大类。以前买CPU时都说缓存,还分一级缓存和二级缓存,其实缓存就是SRAM。 太硬核了。 然后才说到内存,内存就是DRAM。当然SRAM除了在电脑里用,还在很多的电路设计里都要用到,作为地址码或临时数据存储用,所以很多代工厂都会提供SRAM给客户。
从速度上讲SRAM最快,接下来是DRAM,再到硬盘。哎,想想以前的机械硬盘,启动一个程序那叫一个慢啊!现在固态硬盘多好,起飞的感觉!不过话说回来这些底层硬件知识跟我们今天要聊的IO模型有什么关系呢?关系大了去了!主要原因是IO模型的设计很大程度上是为了更好地利用这些硬件资源,减少等待时间嘛,拜托大家...。

阻塞IO:老古董,但简单粗暴
拭目以待。 先说说最原始的阻塞IO吧。这玩意儿就像你排队点餐,得等到前面的人点完、做完、吃完你才能轮到你。代码实现起来特别简单:
listenfd = socket; // 打开一个网络通信套接字
bind; // 绑定
listen; // 监听
while {
connfd = accept; // 阻塞 等待建立连接
int n = read; // 阻塞 读数据
doSomeThing; // 处理数据
close; // 关闭连接
}
换言之... 看起来挺直白吧?问题也显而易见:一个线程处理一个连接,如果客户端请求很多怎么办?线程数量多了就吃内存啊!而且线程切换也浪费CPU资源。哎,想想就头大……不过话说回来这种方式实现起来最简单粗暴。
非阻塞IO:想摆脱阻塞, 后来啊更糟
为了解决阻塞的问题,出现了非阻塞IO。
展开全文存储的概念由来已久。很早之前,计算机之父--冯·诺依曼在提出计算机模型的五大部分中就提到存储器。可以说,没有存储器,计算机也是不完整的。 按照电源关断后数据是否依旧被保存,可以划分为非易失性存储器和易失性存储器两大类。以前买CPU时都说缓存,还分一级缓存和二级缓存,其实缓存就是SRAM。 太硬核了。 然后才说到内存,内存就是DRAM。当然SRAM除了在电脑里用,还在很多的电路设计里都要用到,作为地址码或临时数据存储用,所以很多代工厂都会提供SRAM给客户。
从速度上讲SRAM最快,接下来是DRAM,再到硬盘。哎,想想以前的机械硬盘,启动一个程序那叫一个慢啊!现在固态硬盘多好,起飞的感觉!不过话说回来这些底层硬件知识跟我们今天要聊的IO模型有什么关系呢?关系大了去了!主要原因是IO模型的设计很大程度上是为了更好地利用这些硬件资源,减少等待时间嘛,拜托大家...。

阻塞IO:老古董,但简单粗暴
拭目以待。 先说说最原始的阻塞IO吧。这玩意儿就像你排队点餐,得等到前面的人点完、做完、吃完你才能轮到你。代码实现起来特别简单:
listenfd = socket; // 打开一个网络通信套接字
bind; // 绑定
listen; // 监听
while {
connfd = accept; // 阻塞 等待建立连接
int n = read; // 阻塞 读数据
doSomeThing; // 处理数据
close; // 关闭连接
}
换言之... 看起来挺直白吧?问题也显而易见:一个线程处理一个连接,如果客户端请求很多怎么办?线程数量多了就吃内存啊!而且线程切换也浪费CPU资源。哎,想想就头大……不过话说回来这种方式实现起来最简单粗暴。
非阻塞IO:想摆脱阻塞, 后来啊更糟
为了解决阻塞的问题,出现了非阻塞IO。

