码迷,mamicode.com
首页 > 其他好文 > 详细

IO读写

时间:2020-01-16 10:41:25      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:情况下   占用   缓存   inux   multi   创建   过程   blocking   linu   

1、read & write

      read: 把数据从内核缓冲区复制到进程缓冲区。 write: 把数据从进程缓冲区复制到内核缓冲区。

      上层程序的IO操作、不是物理设备级别的读写,而是缓存的复制。而内核缓冲区和物理设备之间的数据交换则是由操作系统的Kernel来完成。

2、缓冲区

      缓冲区的目的:减少频繁地与设备之间的物理交换。

      Linux系统中,操作系统只有一个内核缓冲区,而每个用户,有自己的独立缓冲区,叫进程缓冲区。

3、四种IO模型

      同步阻塞IO(Blocking IO):

           【优点】阻塞等待数据期间,用户线程挂起,不会占用CPU资源。

           【缺点】为每个连接配置一个线程,在并发量大的情况下,内存、线程切换的开销会非常巨大。

           【高并发场景下不可用】 【Socket默认模式

      同步非阻塞IO(Non-blocking IO)

           【优点】 应用程序不断地进行IO系统调用,轮询数据是否准备好,在内核等待数据地过程中立即返回,在内核缓冲区有数据时才开始阻塞,实时性较好。

           【缺点】 不断地轮询,占用大量CPU时间,效率低下。

           【高并发场景下不可用

      IO多路复用(IO Multiplexing): 避免轮询等待问题。

           【特点】 涉及两种系统调用,一种select/epoll,另一种是IO操作。select先查询注册的socket连接对应的文件描述符(轮询),若可读则用户线程阻塞read读取。

           【优点】 与一个线程维护一个连接的阻塞IO模型相比,select/epoll可以一个选择器同时处理成千上万个连接。不必创建大量的线程,减少系统开销。

           【缺点】 select/epoll是阻塞式的,整个读写过程是阻塞的。

           【New IO技术应用】【Netty】

      异步IO(Asynchronous IO):彻底解除线程的阻塞。

           【特点】 在内核等待和复制数据阶段都不需要阻塞,用户只注册一个IO操作完成的回调函数。

           【缺点】 应用程序仅需要事件注册和接收,其余工作留给操作系统。

4、高并发IO---百万级并发连接

      ulimit -n 1000000

 

    

IO读写

标签:情况下   占用   缓存   inux   multi   创建   过程   blocking   linu   

原文地址:https://www.cnblogs.com/jx9527/p/12199600.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!