Linux高性能服务器编程 epoll反应堆模型
epoll反应堆模型基于该视频所做笔记,视频里面讲的也挺难的,最好先让chat给你梳理一遍整体的代码再去看视频吧 15-epoll反应堆模型总述_bilibili_哔哩哔哩_bilibili 1.epoll反应堆模型概述核心:epoll ET模式 + 非阻塞IO + 轮询 + void *ptr(回调函数) 一般而言socket也是非阻塞的 就是原来咱们监听到事件比如说读事件的话,就得自己去写read或者recv去读数据, 现在有了ptr,就不用管了,有了读事件程序自己就帮我调了回调函数,我不用自己写了 原来步骤: 1.socket、bind、listen 2.epoll_create 创建监听 红黑树 3.返回 epfd – epo11_ct1()向树上添加一个监听fd 4.while(1) 循环着做下面的事情 5-10 5.epoll_wait 监听 6.对应监听fd有事件产生 7.返回 监听满足数组元素个数 8.判断返回数组元素 9.lfd满足 – Accept 建立连接 10.cfd 满足– read() — 小->大 –...
Linux高性能服务器编程 Linux高性能服务器编程中的TCP带外数据梳理总结
Linux高性能服务器编程中的TCP带外数据梳理总结1.TCP 带外数据总结至此,我们讨论完了 TCP 带外数据相关的所有知识。总结梳理一下: 《Linux 高性能服务器编程》第 3 章 3.8 节 (P50):Linux高性能服务器编程 | 读书笔记 | 2. TCP协议-CSDN博客 《Linux 高性能服务器编程》第 5 章 5.8.1 小节 (P81):Linux高性能服务器编程 | 读书笔记 | 3. Linux网络编程基础API-CSDN博客提到的 recv 和 send 调用,函数传入的参数中的 flags 参数为数据收发提供了额外的控制,其中 MSG_OOB标志的含义即为发送或接收紧急数据。使用 MSG_OOB 选项发送带外数据的代码描述了这一过程。 《Linux 高性能服务器编程》第 9 章 9.1.3 小节 (P148):Linux高性能服务器编程 | 读书笔记 | 7. I/O 复用-CSDN博客,socket上接收到普通数据和带外数据都将使select函数返回,但 socket...
Linux高性能服务器编程 重点注意 read系统调用和传入传出参数
1.read系统调用原型1ssize_t read(int fd, void *buf, size_t count); 参数 int fd:文件描述符,是一个指向要读取文件的指针或引用。通过打开文件或设备获得文件描述符。 void *buf:指向用户提供的缓冲区,该缓冲区用于存储从文件中读取的数据。该缓冲区应足够大,以容纳请求读取的字节数(由count参数指定)。 size_t...
Linux高性能服务器编程 阻塞与非阻塞系列问题
1.阻塞IO和非阻塞IO有啥区别? 概念定义 阻塞 IO(Blocking I/O): 当应用程序发起一个 I/O 操作(如读取文件、接收网络数据等)时,在该操作完成之前,应用程序会被阻塞,即线程暂停执行,等待 I/O 操作的完成。例如,在使用read函数从一个网络套接字读取数据时,如果没有数据可读,线程会一直等待,直到有数据到达并被成功读取。 非阻塞 IO(Non - Blocking I/O): 当应用程序发起一个 I/O 操作时,如果操作不能立即完成(例如读取数据时缓冲区没有数据),函数会立即返回一个错误码(如在 Linux 系统中返回EWOULDBLOCK或EAGAIN),而不是阻塞线程等待操作完成。应用程序可以继续执行其他任务,之后可以通过轮询或者其他异步机制来检查 I/O 操作是否可以继续进行。 工作原理 阻塞...
Linux高性能服务器编程 select实现IO多路转接服务器
select实现IO多路转接服务器基于该视频完成 15-select实现多路IO转接设计思路_哔哩哔哩_bilibili 通过响应式–多路IO转接实现 1.思路&功能**功能:**客户端输入小写字符串,服务器转成大写返回给客户端 思路: allset是用来更新rset的,因为rest是传入传出参数,allset是记录传出的rest的,因为rest传出以后,监听列表就变了,可能不会原来的了 2.代码实现warp.h12345678910111213141516171819202122232425262728293031323334353637383940414243#ifndef __WRAP_H_#define...
Linux高性能服务器编程 epoll实现IO多路转接服务器
epoll实现IO多路转接服务器可通过以下视频学习 06-opell函数实现的多路IO转接_哔哩哔哩_bilibili 通过响应式–多路IO转接实现 1.思路&功能**功能:**客户端输入小写字符串,服务器转成大写返回给客户端 思路: 核心思路 socket()、bind()、listen() epoll_create创建红黑树,它的返回值就是树的根节点 epoll_ctl将listenfd添加到树上 循环epoll_wait进行监听,它的返回值是满足监听的总个数,所以以它的返回值为遍历上限去判断事件 如果它返回的数组中data.fd等于lfd,那么就accept去连接客户端 并将新的cfd加入树中 如果不是lfd,就说明有读事件发生,就去判断读到的返回值,<0是出错 ==0是客户端关闭(这两个都要去将该cfd从树中移除...
Linux高性能服务器编程 poll实现IO多路转接服务器
poll实现IO多路转接服务器基于该视频完成 04-poll函数实现服务器_哔哩哔哩_bilibili 通过响应式–多路IO转接实现 要求:能看懂看,看不懂也没啥大事,现在基本都用epoll代替了 大家看视频思路吧,代码就是从讲义里面copy了一份,因为不是很重要的东西 思路 代码实现warp.h12345678910111213141516171819202122232425262728293031323334353637383940414243#ifndef __WRAP_H_#define...
Linux高性能服务器编程 前台进程是什么
前台进程是什么 前台进程的定义 前台进程是指在操作系统中,与用户当前正在交互的进程。这些进程通常拥有最高的优先级,因为它们直接影响用户体验,是用户正在关注或者正在使用的应用程序对应的进程。 例如,当你在手机上打开一个游戏应用并正在进行游戏时,这个游戏应用对应的进程就是前台进程;在桌面系统中,你正在使用的文本编辑器,其进程也是前台进程。 前台进程的特点 资源分配优先级高: 操作系统会为前台进程分配更多的 CPU...
Linux高性能服务器编程 网络字节序本地字节序点分十进制转换函数总结 两种初始化socket并bind的步骤
网络字节序本地字节序点分十进制转换函数总结&&两种初始化socket并bind的步骤看完这些转换可以去看初始化socket的步骤,会印象更加深刻一些 ##1.网络字节序、本地字节序和点分十进制的数据长啥样 1.点分十进制常用来表示ip,就是192.168.120.139这样的字符串 2.本地字节序(主机字节序)和网络字节序字节存储顺序主要分为大端序(Big-endian)和小端序(Little-endian),区别如下 Big-endian:高位字节存入低地址,低位字节存入高地址 Little-endian:低位字节存入低地址,高位字节存入高地址 例如,将12345678h写入1000h开始的内存中,以大端序和小端序模式存放结果如下: 现代 PC...
Linux高性能服务器编程 5. Linux服务器程序规范
5. Linux服务器程序规范1.进程 PID进程的PID(Process ID)是操作系统中用于唯一标识一个进程的整数值。每个进程在创建时,操作系统都会分配一个唯一的PID,用来区分不同的进程。 PID的特点1.唯一性: 在操作系统运行的某一时刻,每个进程的PID都是唯一的。不同进程不会共享同一个PID。即使一个进程终止后,该PID可以被回收并分配给新创建的进程,但在同一时刻不会有两个进程拥有相同的PID。 2.进程生命周期: PID 的生命周期与进程的生命周期相对应。当一个进程被创建时,操作系统为它分配一个PID;当进程终止时,该PID被释放,并可能被分配给后续的新进程。 3.系统管理和调试: PID 在进程管理和调试中起着重要作用。系统管理员和开发者可以通过PID来监视、控制和调试进程。例如,使用 ps 命令可以查看系统中所有进程的PID,以及它们的状态、资源使用等信息。使用 kill 命令可以通过PID来终止指定的进程。 PID的分配PID 是由操作系统内核管理和分配的,通常是一个非负整数。PID...













