以读操作为例:

当应用程序执行read 系统调用读取文件描述符(FD)的时候,如果这块数据已经存在于用户进程的页内存中,就直接从内存中读取数据。如果数据不存在,则先将数据从磁盘加载数据到内核缓冲区中,再从内核缓冲区拷贝到用户进程的页内存中。(两次
拷贝,两次user 和kernel 的上下文切换)。

I/O 的阻塞到底阻塞在哪里?

Blocking I/O

当使用read 或write 对某个文件描述符进行过读写时,如果当前FD 不可读,系统就不会对其他的操作做出响应。从设备复制数据到内核缓冲区是阻塞的,从内核缓冲区拷贝到用户空间,也是阻塞的,直到copy complete,内核返回结果,用户进程才解除block 的状态。

为了解决阻塞的问题,我们有几个思路。

1、在服务端创建多个线程或者使用线程池,但是在高并发的情况下需要的线程会很多,系统无法承受,而且创建和释放线程都需要消耗资源。

2、由请求方定期轮询,在数据准备完毕后再从内核缓存缓冲区复制数据到用户空间(非阻塞式I/O),这种方式会存在一定的延迟。

能不能用一个线程处理多个客户端请求?

传统I/O 数据拷贝相关推荐

  1. JavaScript 数据拷贝

    JavaScript 数据类型 基本数据类型:字符串(String).数字(Number).布尔(Boolean).对空(Null).未定义(Undefined).Symbol. 引用数据类型:对象( ...

  2. DTCC:数据库安全重点在数据拷贝过程中

    本文讲的是DTCC:数据库安全重点在数据拷贝过程中,2017年5月11日-13日,2017中国数据库技术大会于北京国际会议中心盛大开幕.作为国内最受关注的数据库技术大会,本届大会以"数据驱动 ...

  3. 软件架构自学笔记----分享“去哪儿 Hadoop 集群 Federation 数据拷贝优化”

    去哪儿 Hadoop 集群 Federation 数据拷贝优化 背景 去哪儿 Hadoop 集群随着去哪儿网的发展一直在优化改进,基本保证了业务数据存储量和计算量爆发式增长下的存储服务质量.然而,随着 ...

  4. 【C 语言】二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一、二 模型数据拷贝到 三 模型中 并 排序 )

    文章目录 一.指针数组 和 二维数组 数据 拷贝到 自定义二级指针 中 1.函数形参 设计规则 2.三种内存模型 对应 函数形参 指针退化规则 二.完整代码示例 一.指针数组 和 二维数组 数据 拷贝 ...

  5. 【Android RTMP】x264 图像数据编码 ( NV21 格式中的 YUV 数据排列 | Y 灰度数据拷贝 | U 色彩值数据拷贝 | V 饱和度数据拷贝 | 图像编码操作 )

    文章目录 安卓直播推流专栏博客总结 一. NV21 图像数据中的 YUV 数据简介 二.向 x264 编码图片 三. 提取 NV21 数据中的灰度数据 Y 四. 提取 NV21 数据中的饱和度数据 U ...

  6. cuda二维数组内存分配和数据拷贝

    uda二维数组内存分配和数据拷贝 2016-04-20 10:54 138人阅读 评论(0) 收藏 举报 分类: 机器学习(11) 人工智能(9) 版权声明:本文为博主原创文章,允许转载. 因为cud ...

  7. 两台电脑间大量数据拷贝的快捷方法

    可能大家会遇到需要将一台电脑里的数据拷贝到另外一台电脑,最常用的方法是用u盘或移动硬盘等存储设备来拷贝,这样速度慢,而且可能拷贝多次才能将数据拷贝完.现提供一种方法,就是通过windows 的文件共享 ...

  8. docker cp :用于容器与主机之间的数据拷贝

    2019独角兽企业重金招聘Python工程师标准>>> 宿主机与容器间文件的复制 docker cp :用于容器与主机之间的数据拷贝 语法:docker cp [OPTIONS] C ...

  9. C语言学习笔记---数据拷贝函数memcpy()和memmove()函数

      在C语言中拷贝字符串的时候通常可以使用strcpy()函数和strncpy()函数,这两个函数是专门针对字符串拷贝的.如果想要拷贝其他类型数组的话,可以使用memcpy()和memmove()函数 ...

最新文章

  1. 【原创】ListView快速滚动至新添加一行(自动滚动)
  2. 《设计模式 系列》- 面向对象六大原则
  3. RabbitMQ (五)实现类似Dubbo的RPC调用
  4. 我来悟微服务(3)-需求管理
  5. c语言程序大型案例分析,C语言程序设计习题解析与应用案例分析(第2版)
  6. Intel Realsense D435 opencv 为什么将color图转换成灰度图后,再与depth图水平堆叠,其结果一片黑色?(数据未map到0-255)
  7. java 文件 递归_JAVA实现遍历文件夹下的所有文件(递归调用和非递归调用)
  8. python中return和and连用
  9. 目标检测第4步:显卡、GPU、CUDA、cuDNN的介绍及如何在Windows 10下安装cuDNN?
  10. 设计干货 | 时尚简约海报模板
  11. 网站前端_EasyUI.基础入门.0002.带你玩转jQuery EasyUI Panel组件 ?
  12. 2021-03-06JAVA大数据Week1
  13. 关于GDAL计算图像坐标的几个问题
  14. 区块链 Fisco bcos 智能合约(12)-Solidity的基础特性
  15. 从用户端到后台系统,严选分销教会我这些事
  16. QT谷歌拼音输入法的移植
  17. android apk 反编译 工具下载,android apk反编译工具下载_android apk反编译工具官方下载-太平洋下载中心...
  18. lenovo启动热键_常见电脑启动项热键
  19. 听说股票是暴利?花了一晚上时间,用Python写了个股票提醒系统
  20. 淘宝网店装修代码使用方法大全

热门文章

  1. 机器学习之数据预处理
  2. webpack(一) 配置
  3. java常用的框架介绍
  4. 不同数据库间的数据访问--dblink
  5. BZOJ4543 POI2014 Hotel加强版 【长链剖分】【DP】*
  6. Python学习:16.Python面对对象(三、反射,构造方法,静态字段,静态方法)
  7. 【数学】概念的理解 —— 有序对(ordered pair)
  8. Java正则表达式入门
  9. rfid5-写成platform驱动
  10. 用jQuery实现网页卷轴的效果