• 2024-09-10Day5网络编程:epoll+服务器模型+ftp
    1.io多路复用:epollepoll的提出--》它所支持的文件描述符上限是系统可以最大打开的文件的数目;eg:1GB机器上,这个上限10万个左右。每个fd上面有callback(回调函数)函数,只有产生事件的fd才有主动调用callback,不需要轮询。注意:Epoll处理高并发,百万级1.红黑树:是特殊的二叉
  • 2024-09-09Linux:多路转接 select、poll、epoll
    1:select#include<sys/select.h>intselect(intnfds,fd_set*readfds,fd_set*writefds,fd_set*exceptfds,structtimeval*timeout);   select函数是POSIX标准定义的一个系统调用,用于监视多个文件描述符(filedescriptors),以确定它们是否具有可读、可写或异常
  • 2024-09-07[Redis]Redis到底是单线程还是多线程程序?
    概述这里我们先给出问题的全面回答:Redis到底是多线程还是单线程程序要看是针对哪个功能而言,对于核心业务功能部分(命令操作处理数据),Redis是单线程的,主要是指Redis的网络IO和键值对读写是由一个线程来完成的,这也是Redis对外提供键值存储服务的主要流程,所以一般我们认为Red
  • 2024-09-05万字解析qinguoyi / TinyWebServer项目的源码
    前言项目地址项目详细介绍本文章适合刚学习完C++基础知识并尝试实现一个网络编程项目的同学,其中包含了该项目的代码逐行注释和解析以及许多刚学习网络编程中会遇到的疑问。项目简介:Linux下C++轻量级Web服务器,助力初学者快速实践网络编程,搭建属于自己的服务器.使用线
  • 2024-09-05select、poll、epoll的原理
    目录1.IO多路复用2.select原理3.poll原理4.epoll原理5.select、poll、epoll总结6.epoll原理详解6.1内核收包的过程6.2进程调度时的阻塞6.3再来看一下内核收网络数据的过程6.4select的原理6.5epoll的设计原理6.6补充6.7总结1.IO多路复用IO多路复用就是一个线程
  • 2024-09-02重头开始嵌入式第三十一天(IO多路复用)
    目录1.IO多路复用1.IO模型1、阻塞IO ===》最常用 默认设置2、非阻塞IO ===》在阻塞IO的基础上调整其为不再阻塞等待。 在程序执行阶段调整文件的执行方式为非阻塞:3.信号驱动io 4.并发  5.IO 多路复用 ===》并发服务器 ===》TCP协议1、select循环服务器 ===
  • 2024-08-28IO的多路复用
    一、select()1.1、处理流程1、创建文件描述符集合fd_set2、添加文件描述符到集合中intFD_ISSET(intfd,fd_set*set);3、通知内核开始监测select 4、内核返回的结果(两个结果,1、是那种类型得文件),做对应得操作(对IO读、写操作)1.2、函数接口(1)select()函数接口 #inc
  • 2024-08-28【Linux网络编程】基于 EPOLL 的 SOCKET 通信
    【Linux网络编程】基于EPOLL的SOCKET通信epoller.h#ifndefEPOLLER_H#defineEPOLLER_H#include<sys/epoll.h>#include<fcntl.h>#include<unistd.h>#include<assert.h>#include<errno.h>#include<vector>classEpoller{publ
  • 2024-08-28【Linux网络编程】I/O 多路复用技术
    【Linux网络编程】I/O多路复用技术什么是I/O多路复用?为什么需要I/O多路复用最简单的socket网络模型,就是单线程模型,一个同时进行监听、处理,然而,单线程模型同时只能服务一个客户端,当线程发生阻塞的时候,其他客户端只能排队等待,甚至连接失败。为了能够同时服务更多的客户端,
  • 2024-08-27Linux——网络(3)
    一、服务器1、单循环服务器        服务器在同一时刻只能响应一个客户端的请求2、并发服务器模型        服务器在同一时刻可以响应多个客户端的请求3、TCP和UDP        UDP: 无连接        TCP:  有连接           
  • 2024-08-25[操作系统]IO多路复用
    从阻塞I/O到I/O多路复用阻塞I/O,是指进程发起调用后,会被挂起(阻塞),直到收到数据再返回。如果调用一直不返回,进程就会一直被挂起。因此,当使用阻塞I/O时,需要使用多线程来处理多个文件描述符。多线程切换有一定的开销,因此引入非阻塞I/O。非阻塞I/O不会将进程挂起,调用时会立
  • 2024-08-25[操作系统]阻塞io 非阻塞io Epoll
    BlockingI/O,NonblockingI/O,AndEpollJanuary10,2017InthispostIwanttoexplainexactlywhathappenswhenyouusenonblockingI/O.Inparticular,Iwanttoexplain:ThesemanticsofsettingO_NONBLOCKonafiledescriptorusingfcntlHownonblock
  • 2024-08-20非阻塞套接字与IO多路复用
    非阻塞套接字与IO多路复用非阻塞套接字#【本机环境运行】#01-TCP非堵塞通信.py#使用TCP调试助手作为客户端importsockettcp_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)tcp_socket.bind(("",9000))tcp_socket.listen(128)#设置监听套接字为非
  • 2024-08-0463 epoll服务器 (ET模式)
    基于LT模式修改,并加入前面的应用层计算器,实现稍完整的服务器功能1.修改tcp_socket.hpp,新增非阻塞读和非阻塞写接口2.对于accept返回的new_sock加上EPOLLET这样的选项注意:此代码暂时未考虑listen_sockET的情况,如果将listen_sock设为ET,则需要非阻塞轮询的方式accept,否则会
  • 2024-08-02使用epoll编写TCP服务器示例
    #include<stdio.h>#include<stdlib.h>#include<string.h>#include<errno.h>#include<netinet/in.h>#include<sys/socket.h>#include<arpa/inet.h>#include<sys/epoll.h>#include<unistd.h>#include
  • 2024-07-28全网最全最新100道C++面试题:20-40
    前述:本文初衷是为了总结本人在各大平台看到的C++面经,我会在本文持续更新我所遇到的一些C++面试问题,如有错误请一定指正我。新建立了一个收集问答的仓库,欢迎各位小伙伴来更新鸭interview_experience:本仓库初衷是想为大家提供一个便利,全面,准确的面试题学习场地,大家都可以对仓库
  • 2024-07-23内核Select、Poll、Epoll多路复用
    Java-NIO的整体结构Java-NIO体系最关键的是Selector选择器,它是整个NIO体系中较为复杂的一块内容,同时它也作为Java-NIO与内核多路复用模型的“中间者”,其中SelectorProvider的作用是什么?主要目的是用于创建选择器,在Java中创建一般是通过如下方式:// 创建Selector选择器Sele
  • 2024-07-23UDP使用Epoll 实现
       #include<sys/socket.h>#include<sys/epoll.h>#include<netinet/in.h>#include<arpa/inet.h>#include<fcntl.h>#include<unistd.h>#include<stdio.h>#include<errno.h>#include<stdlib.h>#
  • 2024-07-18【Linux网络编程-7】epoll边沿触发
    非阻塞recvEAGAIN、EWOULDBLOCK错误码值11返回值含义>0接收字节数0接收FIN包,连接被对端断开-1(errno==EAGAIN||EWOULDBLOCK)表示还有数据未读。反之,则表示发生了错误。//epollServer.cpp#include<stdio.h>#include<stdlib.h>#include<string.h>#in
  • 2024-07-11多路复用IO
    简单实现的socket-CSDN博客        在上面的文章中,我们使用socket(创建)、bind(绑定)、listen(监听)、accept(接收)这四个函数,讲了如何利用socket创建一个网络套接字,并在文章结尾实现了一个简单的多进程服务器。多进程服务器:每当有一个新的客户端建立连接,就会创建一
  • 2024-07-09[Java并发]IO多路复用
    IOIO多路复用BIONIOselectpollepoll水平触发和边沿触发水平触发只关心文件描述符中是否还有没完成处理的数据,如果有,不管怎样epoll_wait,总是会被返回。简单说——水平触发代表了一种“状态”。边沿触发只关心文件描述符是否有新的事件产生,如果有,则返回;如果返回过一次,
  • 2024-07-06linux下高级IO模型
    高级IO1.高级IO模型基本概念1.1阻塞IO1.2非阻塞IO1.3信号驱动IO1.4IO多路转接1.5异步IO2.模型代码实现2.1非阻塞IO2.2多路转接-selectselect函数介绍什么才叫就绪呢?demoselect特点2.3多路转接-pollpoll函数介绍poll优缺点demo2.4多路转接-epoll(重点)epoll系
  • 2024-06-17【简单讲解下epoll】
  • 2024-06-12模拟epoll的饥饿场景
    说明一直听说epoll的饥饿场景,但是从未在实际环境中面对过,那么能不能模拟出来呢?实际的情况是怎样呢?模拟步骤基于epoll写一个简单的tcpechoserver,将每次read返回的字节数打印出来模拟一个客户端大量写入测试其他客户端能否正常返回Server代码#include<stdio.h>#include
  • 2024-06-12epoll使用与原理
    使用要点边缘模式(ET)与水平模式(LT)区别下面内容来自linuxmanpageTheepolleventdistributioninterfaceisabletobehavebothasedge-triggered(ET)andaslevel-triggered(LT).Thedifferencebetweenhetwomechanismscanbedescribedasfollows.Suppo