图文详解Linux的IO模型和相关技术

微信一面:一致性哈希是什么,使用场景,解决了什么问题? 在逛牛客网的面经的时候,发现有位同学在面微信的时候,被问到这个问题: 第一个问题就是:一致性哈希是什么,使用场景,解决了什么问题? 这个问题还挺有意思的,所以今天就来聊聊这个。 发车! 如何分配请求? 大多数网站背后肯定不是只有一台服务器提供服务,因为单机的并发量和数据量都是有限的,所以都会用多台服务器构成集群来对外提供服务。 但是问题来了,现在有那么多个节点(后面统称服务器为节点,因为少一个字),要如何分配客户端的请求呢? 其实这个问题就是「负载均衡问题」。解决负载均 阅读详情

阻塞IO模型(Blocking I/O)

 

file

Linux 内核一开始提供了 read 与 write 阻塞式操作。

  • 当客户端连接时,会在对应进程的文件描述符目录(/proc/进程号/fd)生成对应的文件描述符(0 标准输入;1 标准输出;2 标准错误输出;),比如 fd 8 , fd 9;
  • 应用程序需要读取的时候,通过系统调用 read (fd8)读取,如果数据还没到来,此应用程序的进程或线程会阻塞等待。
man 2 read
概述
     #include <unistd.h>
     ssize_t read(int fd, void *buf, size_t count);
描述
     read() 从文件描述符 fd 中读取 count 字节的数据并放入从 buf 开始的缓冲区中.
     如果 count 为零,read()返回0,不执行其他任何操作. 如果 count 大于SSIZE_MAX,那么结果将不可预料.
返回值
     成功时返回读取到的字节数(为零表示读到文件描述符), 此返回值受文件剩余字节数限制.当返回值小于指定的字节数时 并不意味着错误;这可能是因为当前可读取的字节数小于指定的 字节数(比如已经接近文件结尾,或
     者正在从管道或者终端读取数 据,或者 read()被信号中断). 发生错误时返回-1,并置 errno 为相应值.在这种情况下无法得知文件偏移位置是否有变化.

问题

如果出现了很多的客户端连接,比如1000个,那么应用程序就会启用1000个进程或线程阻塞等待。此时会出现性能问题:

  • CPU 会不停的切换,造成进程或线程上下文切换开销,实际读取IO的时间占比会下降,造成CPU算力浪费。 因此,推动了 non-blocking I/O 的诞生。

非阻塞IO模型(non-blocking I/O)

 

file

此时,Linux 内核一开始提供了 read 与 write 非阻塞式操作,可以通过socket设置SOCK_NONBLOCK标记 。

  • 此时应用程序就不需要每一个文件描述符一个线程去处理,可以只有一个线程不停轮询去读取read,如果没有数据到来,也会直接返回。
  • 如果有数据,则可以调度去处理业务逻辑。man 2 socket复制代码
Since  Linux  2.6.27, the type argument serves a second purpose: in addition to specifying a socket type, it may include the bitwise OR of any of the following values, to modify the behavior of
       socket():

       SOCK_NONBLOCK   Set the O_NONBLOCK file status flag on the open file description (see open(2)) referred to by the new file descriptor.  Using this flag saves extra calls to fcntl(2) to  achieve
                       the same result.

从这里可以看出来 socket Linux 2.6.27内核开始支持非阻塞模式。

分享更多关于C/C++ Linux后端开发网络底层原理知识学习提升 学习资料,完善技术栈,内容知识点包括Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,音视频开发,Linux内核,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等等。

视频学习资料点击:C/C++Linux服务器开发/Linux后台架构师-学习视频

 

问题

同理,当出现了很多的客户端连接,比如1000个,那就会触发1000次系统调用。(1000次系统调用开销也很客观)

因此,有了 select。

IO复用模型(I/O multiplexing) - select

 

file

此时,Linux 内核一开始提供了 select 操作,可以把1000次的系统调用,简化为一次系统调用,轮询发生在内核空间。

  • select系统调用会返回可用的 fd集合,应用程序此时只需要遍历可用的 fd 集合, 去读取数据进行业务处理即可。man 2 select复制代码
SYNOPSIS
       #include <sys/select.h>
       int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);

DESCRIPTION
       select() allows a program to monitor multiple file descriptors, waiting until one or more of the file descriptors become "ready" for some class of I/O operation (e.g., input possible). A file
       descriptor is considered ready if it is possible to perform a corresponding I/O operation (e.g., read(2), or a sufficiently small write(2)) without blocking.

       select() can monitor only file descriptors numbers that are less than FD_SETSIZE; poll(2) and epoll(7) do not have this limitation. See BUGS.

可以看到支持传输多个文件描述符交由内核轮询。

问题

虽然从1000次系统调用,降为一次系统调用的开销,但是系统调用开销中需要传参1000个文件描述符。这也会造成一定的内存开销。

因此,有了 epoll。

select() can monitor only file descriptors numbers that are less than FD_SETSIZE; poll(2) and epoll(7) do not have this limitation. See BUGS.

IO复用模型(I/O multiplexing) - epoll

 

file

man epoll
man 2 epoll_create
man 2 epoll_ctl
man 2 epoll_wait
  • epoll:
SYNOPSIS
       #include <sys/epoll.h>

DESCRIPTION
       The  epoll  API  performs  a  similar task to poll(2): monitoring multiple file descriptors to see if I/O is possible on any of them.  The epoll API can be used either as an edge-triggered or a
       level-triggered interface and scales well to large numbers of watched file descriptors.

       The central concept of the epoll API is the epoll instance, an in-kernel data structure which, from a user-space perspective, can be considered as a container for two lists:

       • The interest list (sometimes also called the epoll set): the set of file descriptors that the process has registered an interest in monitoring.

       • The ready list: the set of file descriptors that are "ready" for I/O.  The ready list is a subset of (or, more precisely, a set of references to) the file descriptors in  the  interest  list.
         The ready list is dynamically populated by the kernel as a result of I/O activity on those file descriptors.
  • epoll_create :

内核会产生一个epoll 实例数据结构并返回一个文件描述符epfd。

  • epoll_ctl :

对文件描述符 fd 和 其监听事件 epoll_event 进行注册,删除,或者修改其监听事件 epoll_event 。

SYNOPSIS
       #include <sys/epoll.h>
       int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);

DESCRIPTION
       This system call is used to add, modify, or remove entries in the interest list of the epoll(7) instance referred to by the file descriptor epfd. It requests that the operation op be performed
       for the target file descriptor, fd.

       Valid values for the op argument are:
       EPOLL_CTL_ADD
              Add an entry to the interest list of the epoll file descriptor, epfd. The entry includes the file descriptor, fd, a reference to the corresponding open file description (see epoll(7)
              and open(2)), and the settings specified in event.
       EPOLL_CTL_MOD
              Change the settings associated with fd in the interest list to the new settings specified in event.
       EPOLL_CTL_DEL
          Remove (deregister) the target file descriptor fd from the interest list. The event argument is ignored and can be NULL (but see BUGS below).
  • epoll_wait :

阻塞等待注册的事件发生,返回事件的数目,并将触发的可用事件写入epoll_events数组中。

其他IO优化技术

man 2 mmap
man 2 sendfile
man 2 fork

mmap:

就是在用户的虚拟地址空间中寻找空闲的一段地址进行对文件的操作,不必再调用read、write系统调用,它的最终目的是将磁盘中的文件映射到用户进程的虚拟地址空间,实现用户进程对文件的直接读写,减少了文件复制的开销,提高了用户的访问效率。

以读为例:

 

file

  • 使用场景

kafka的数据文件就是用的mmap,写入文件,可以不经过用户空间到内核的拷贝,直接内核空间落盘。

再比如Java中的MappedByteBuffer底层在Linux就是mmap。

分享更多关于C/C++ Linux后端开发网络底层原理知识学习提升 学习资料,完善技术栈,内容知识点包括Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,音视频开发,Linux内核,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等等。

视频学习资料点击:C/C++Linux服务器开发/Linux后台架构师-学习视频

sendfile:

 

file

sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操作),从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率很高,被称之为零拷贝。

  • 使用场景

比如 kafka,消费者进行消费时,kafka直接调用 sendfile(Java中的FileChannel.transferTo),实现内核数据从内存或数据文件中读出,直接发送到网卡,而不需要经过用户空间的两次拷贝,实现了所谓"零拷贝"。

再比如Tomcat、Nginx、Apache等web服务器返回静态资源等,将数据用网络发送出去,都运用了sendfile。

fork

man 2 fork

创建子进程有三种方式:

  • fork,调用后,子进程有自己的pid和task_struct结构,基于父进程的所有数据资源进行副本拷贝,主要是复制自己的指针,并不会复制父进程的虚存空间,并且父子进程同时进行,变量互相隔离,互不干扰。

现在Linux中是采取了Copy-On-Write(COW,写时复制)技术,为了降低开销,fork最初并不会真的产生两个不同的拷贝,因为在那个时候,大量的数据其实完全是一样的。 写时复制是在推迟真正的数据拷贝。若后来确实发生了写入,那意味着父进程和子进程的数据不一致了,于是产生复制动作,每个进程拿到属于自己的那一份,这样就可以降低系统调用的开销。

NOTES
       Under  Linux,  fork()  is implemented using copy-on-write pages, so the only penalty that it incurs is the time and memory required to duplicate the parent's page tables, and to create a unique
       task structure for the child.
  • vfork,vfork系统调用不同于fork,用vfork创建的子进程与父进程共享地址空间,也就是说子进程完全运行在父进程的地址空间上,也就是子进程对虚拟地址空间任何数据的修改同样为父进程所见。并且vfork完子进程,父进程是阻塞等待子进程结束才会继续。
  • clone,可以认为是fork 与 vfork的混合用法。由用户通过参clone_flags 的设置来决定哪些资源共享,哪些资源副本拷贝。 由标志CLONE_VFORK来决定子进程在执行时父进程是阻塞还是运行,若没有设置该标志,则父子进程同时运行,设置了该标志,则父进程挂起,直到子进程结束为止。
  • 总结fork的用途 一个进程希望对自身进行副本拷贝,从而父子进程能同时执行不同段的代码。 比如 redis的RDB持久化就是采用的就是fork,保证副本拷贝的时点准确,并且速度快,不影响父进程继续提供服务。vfork的用途 用vfork创建的进程主要目的是用exec函数先执行另外的程序。clone的用途 用于有选择地设置父子进程之间哪些资源需要共享,哪些资源需要副本拷贝。

 

Linux 网络 I/O 模型简介(图文) 1、介绍 Linux 的内核将所有外部设备都看做一个文件来操作(一切皆文件),对一个文件的读写操作会调用内核提供的系统命令,返回一个file descriptor(fd,文件描述符)。而对一个socket的读写也会有响应的描述符,称为socket fd(socket文件描述符),描述符就是一个数字,指向内核中的一个结构体(文件路径,数据区等一些属性)。 根据UNIX网络编程对I/O模型的分类,UNIX提供了5种I/O模型。 1.1、阻塞I/O模型 最常用的I/O模型,默认 阅读详情

相关推荐

Linux I/O系列之直接内存(Direct IO)原理剖析和使用

在上一篇文章《Linux I/O操作fsync后数据就安全了么(fsync、fwrite、fflush、mmap、write barriers详解)》中咱们一起学习了在Linux中如何将数据安全的写入到磁盘。其中我们提到了直接IO。使用它能够在磁盘缓存空间和用户空间直接建立一个通道,这样咱们在用户空间就能够直接操作磁盘中的数据。本文咱们就一起深入学习直接IO。

跳小闹成长记 7197

linux select read阻塞_一文带你区分阻塞、非阻塞、同步、异步IO

前言:在之前的Redis面试套路拆解的文章[Redis面试套路拆解(一)]中有提到过IO模型,并且IO模型本身也是一个比较容易混淆的高频面试考点,小黑板将在本篇文章帮你理清思路,区分各种IO模型~其实网络上已经有很多博客讲了这个问题,但是总是觉得看完之后还是迷迷糊糊的,感觉大家有点太执着于把这个问题讲的通俗易懂了,经常会举各种各样的例子,比如烧水、去银行办理业务之类的,然而看完之后反倒会产生更多的...

weixin_39946364的博客 601

分析Linux 内核 SCSI IO 子系统

LINUX 内核中 SCSI 子系统由 SCSI 上层,中间层和底层驱动模块 [1] 三部分组成,主要负责管理 SCSI 资源和处理其他子系统,如文件系统,提交到 SCSI 子系统中的 IO 请求。因此,理解 SCSI 子系统的 IO 处理机制对理解整个 SCSI 子系统就显的十分重要,同时也有助于理解整个 LINUX 内核的 IO 处理机制。本文从 SCSI 设备访问请求的提交,SCSI 子系统对访问请求的处理和 SCSI 子系统错误处理三个方面,阐述了 SCSI 子系统的 IO 处理机制。

m0_74282605的博客 664

select检测到可读,调用read的情况

1、当是接收缓冲区的数据大于低潮阀值时,调用read返回实际读出的字节数 2、收到FIN,调用read返回的是0 3、收到RST,调用read返回-1

多看多听多总结 3880

一文带你完成ARMv8架构中的cache知识点

【摘要】 在最初开发ARM架构时,处理器的时钟速度和内存的访问速度大致相同。今天的处理器内核要复杂得多,其时钟速度可以快上几个数量级。但是,外部总线和内存设备的频率并没有扩大到同样的程度。有可能实现小块的片上SRAM,它可以以与内核相同的速度运行,但是与标准的DRAM块相比,这种RAM非常昂贵,因为后者的容量可以达到数千倍。在许多基于ARM处理器的系统中,访问外部存储器需要几十甚至几百个内核周期。 cache的技术背景 在最初开发ARM架构时,处理器的时钟速度和内存的访问速度大致相同。今天的处.

ABCCloud的博客 1854

HybridCLR热更新全流程实操:用Addressables实现资源+代码双热更(Unity 2021版)

本文详细介绍了在Unity 2021 LTS版本中,如何结合HybridCLR代码热更新与Addressables资源管理系统,实现资源与代码的双热更解决方案。通过环境配置、技术架构设计、实战案例和性能优化,帮助开发者解决中大型项目中的依赖管理和版本协同问题,提升游戏迭代效率。

cc789的博客 848

linux select read阻塞_图解Linux的IO模型和相关技术

阻塞IO模型(Blocking I/O)Linux 内核一开始提供了 read 与 write 阻塞式操作。当客户端连接时,会在对应进程的文件描述符目录(/proc/进程号/fd)生成对应的文件描述符(0 标准输入;1 标准输出;2 标准错误输出;),比如 fd 8 , fd 9;应用程序需要读取的时候,通过系统调用 read (fd8)读取,如果数据还没到来,此应用程序的进程或线程会阻塞等待。m...

weixin_39801714的博客 955

类银河恶魔城学习记录1-1 Player状态机的搭建 P28

什么是状态机?一篇文章就够了 - 知乎说实话,目前并不能深入理解状态机的奇妙之处(当然,我觉得状态机作为教程的重要组成部分是不得不理解的,所以以下我会对游戏教程内的状态机做一些我认为的解释,如有错误,请多包涵)

Homura_的博客 2343

linux select read阻塞_阻塞&非阻塞&同步&异步之间的关系

一:阻塞与非阻塞阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。1.blockingIO(阻塞):1.1:阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后...

weixin_39716264的博客 870

VIL-SLAM论文翻译:Stereo Visual Inertial LiDAR Simultaneous Localization and Mapping

文章目录写在前面摘要1.引言2.相关工作3.系统概述4.视觉前端5.双目视觉惯性里程计A. IMU预积分因子B. 非结构化视觉因子C. 优化和边缘化6. 激光建图A. LiDAR扫描去畸变B. 帧到地图配准7. LiDAR增强的闭环A. 回环检测B. 回环约束C. 全局位姿图优化D. 重定位8. 实验结果A.平台和软件B.测试和结果C. EuRoCMAV数据集测试9.结论 写在前面 写作参考: robot L 开源代码: 开源代码链接 论文原文: 原文链接 摘要 SLAM是移动和空中机器人的一项基本任务

JaydenQ的博客 2322

【车载开发系列】ParaSoft单元测试环境配置(一)

bdf是数据文件的一种类型,表示一种数据库文件。在ParaSoft当中,可以使用bdf文件来快速创建一个测试项目。

千月星跡 2148

【Linux C | I/O模型】Unix / Linux系统的5种IO模型 | 图文详解

本文图文详解Linux系统的五种IO模型,阻塞I/O模型、非阻塞I/O模型、复用式I/O模型、信号驱动式I/O模型、异步I/O模型

wkd_007的博客 2192

【python3.7】解决报错 error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++

解决pip安装py7zr遇到的报错问题。

水w的博客 3944

图文详解:Linux epoll和io_uring到底谁更牛?

文章中涉及到的epoll、io_uring以及百万并发相关的知识在我的新书《图解Linux网络编程》中有详细介绍,如果你想系统性地学习Linux网络编程,成为别人眼中的大佬,欢迎入手我的新书。

weixin_28673511的博客 973

有限元分析-静力学分析-与分析解对比-——以阶梯轴的静力分析为例——静态结构分析

150mm,a=300mm{a=300mm}a=300mm,b=200mm{b=200mm}b=200mm,L=1000mm{L=1000mm}L=1000mm,F=300kN{F=300kN}F=300kN,材料为45,弹性模量E=2.1e11Pa{E=2.1e11Pa}E=2.1e11Pa,泊松比v=0.28{v=0.28}v=0.28,屈服应力δs=355MPa{δ_s=355MPa}δ。使用line body生成的模型,可以选择自动划分网格的,WB会将以梁单元将其划分完成,例如图2所示。

qq_15963745的博客 68

TriCore架构-基于TC397的启动流程

TC397芯片的启动流程分为三个关键阶段:固件启动(BootFirmware)、Bootloader引导和应用程序启动。BootFirmware作为硬件信任根,包含SSW基础初始化、CHSW自检和BSL应急刷写通道。Bootloader承担安全验证和程序引导功能,支持双分区(AB-SWAP)和双引导方案(PBL/SBL)。安全启动通过校验机制确保软件完整性,提供三种可选技术方案。应用程序启动阶段实现软件双分区管理,支持SOTA更新。整个流程体现了汽车电子系统的安全设计理念,通过硬件级保护与软件验证相结合确保

xiandang8023的博客 987

Linux 五种IO模型详细图解

一、IO 简述 IO (Input/Output,输入/输出)即数据的读取(接收)或写入(发送)操作,通常用户进程中的一个完整IO分为两阶段:用户进程空间<–>内核空间、内核空间<–>设备空间(磁盘、网络等)。 IO有内存IO、网络IO和磁盘IO三种,通常我们说的IO指的是后两者。 LINUX中进程无法直接操作I/O设备,其必须通过系统调用请求kernel来协助完成I/O...

qq_35887546的博客 1769

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

[Linux]五种IO模型(图文讲解+故事讲解)

五种IO模型:1.阻塞IO:在内核将数据准备好之前,系统调用将会一直等待,所有的套接字, 默认都是阻塞方式.阻塞IO是最常见的IO模型。2.非阻塞IO:也称为非阻塞轮询式IO,如果内核未将数据准备好,系统调用不会等待阻塞,会直接返回,且返回的是EWOULDBLOCK错误码。注意:使用非阻塞IO,一般要进行轮询操作,即反复的进行IO操作(如读写文件等操作,看看文件描述符是否已经就绪)直到操作完成,这对CPU是一个很大的消耗,一般只有特定的场景才使用。3.信号驱动IO:内核将数据准备好之后,发送SIGIO信号通

2202_75305885的博客 1357

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

linux网卡IO,浅谈Linux 网络 I/O 模型简介(图文)

1、介绍Linux 的内核将所有外部设备都看做一个文件来操作(一切皆文件),对一个文件的读写操作会调用内核提供的系统命令,返回一个file descriptor(fd,文件描述符)。而对一个socket的读写也会有响应的描述符,称为socket fd(socket文件描述符),描述符就是一个数字,指向内核中的一个结构体(文件路径,数据区等一些属性)。根据UNIX网络编程对I/O模型的分类,UNIX...

weixin_28933179的博客 418

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

IO模型及Nginx架构流程概述

文章目录第一章 概述第二章 五种IO 网络模型1. 阻塞IO(blocking I/O)2. 非阻塞IO(nonblocking I/O)3. 多路复用IO(I/O multiplexing (select、poll、epoll))4. 信号驱动IO(signal driven I/O (SIGIO))5. 异步IO(asynchronous I/O)第三章 汇总第四章 libevent1. li...

王道长的技术博客 438

Linux下基本指令(图文并茂、万字详解)

本文包括ls指令、pwd指令、cd指令、touch指令、mkdir指令、tree指令、rm指令、man指令、cp指令、nano指令、mv指令、cat指令、tac指令、echo指令、more指令、less指令、head指令、tail指令、wc指令、时间相关的指令、cat指令、find指令、which指令、whereis指令、alisa指令、grep指令、xargs指令、zip/unzip指令、bc指令、bar指令、uname指令、几个重要热键、关机指令,图文并茂,非常好理解

2302_80475369的博客 1425

Linux网络编程05:IO多路转接(万字图文解析)

本文介绍了五种网络IO模型及其数据传输过程,重点分析了阻塞/非阻塞与同步/异步的区别。详细讲解了IO多路转接原理,包括select、poll、epoll等机制,并提供了fcntl函数的使用示例。文章还阐述了多路IO转接服务器的优势,即通过内核监控文件描述符实现高效并发处理,相比传统多线程/多进程模型具有更低资源消耗。核心内容涵盖IO模型分类、系统调用实现原理及性能优化方法,为网络编程提供了理论基础和实践指导。

2301_80030580的博客 908

图文详解Linux EPOLL

Linux EPOLL超详细解读,图文并茂,原文请关注知乎-晏舒,同作者

cxjczy1990的博客 1180

Linux文件管理(附带超详细图文总结)

IO 是指程序与外部设备(如键盘、显示器、文件、网络、硬件设备等)之间的数据交换。输入(Input):从外部设备读取数据到程序。输出(Output):将程序中的数据写入外部设备。

2301_80059433的博客 1136

解码Linux文件IO之BMP 图像原理与应用

BMP(位图)是微软开发的图像文件格式,采用无压缩存储方式,文件较大但解析简单,适合本地开发。其结构由文件头(14字节)、信息头(40字节)、可选调色板和像素数据组成,总头部长54字节。关键特性包括:支持多种色深(1/4/8/24/32bit),24bit最常见;像素数据采用BGR顺序;行数据需4字节对齐;默认从下到上存储图像。BMP与JPEG、PNG等格式相比,优势在于无压缩、解码简单,但文件体积较大,适用于LCD显示等本地场景。开发时需注意小端存储、行对齐和像素格式转换等技术细节。

愿能与同路的你交流互鉴~ 博客园 :https://www.cnblogs.com/YouEmbedded/ 1750

高并发IO的底层原理

IO的原理和模型是隐藏在编程知识底下的,是开发人员必须掌握的基础原理,是基础的基础,更是通关大公司面试的必备知识。本章从操作系统的底层原理入手,通过图文并茂的方式,为大家深入剖析高并发IO的底层原理,并介绍如何通过设置来让操作系统支持高并发。 IO读写的基础原理 大家知道,用户程序进行IO的读写,依赖于底层的IO读写,基本上会用到底层的read&write两大系统调用。在不同的操作系统中,IO读写的系统调用的名称可能不完全一样,但是基本功能是一样的。 这里涉及一个基础的知识:read系统调用,并不是

vlid_ANDY的专栏 407
上一篇: 深度剖析Linux内核地址映射机制
下一篇: 音视频开发基础知识到进阶剖析
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值