- 博客(101)
- 收藏
- 关注
原创 【Linux网络】epoll
摘要:本文介绍了Linux高性能I/O多路复用机制epoll的核心原理与使用方法。首先讲解epoll的三个关键系统调用:epoll_create创建句柄、epoll_ctl管理监控事件、epoll_wait获取就绪事件。其底层通过红黑树存储监控fd,内核回调机制将就绪事件加入队列。文章还分析了epoll惊群问题的成因(多进程同时被唤醒)及四种解决方案,包括EPOLLEXCLUSIVE标志和SO_REUSEPORT选项。最后对比了水平触发(LT)和边沿触发(ET)两种模式的特点:LT持续通知未处理事件,ET仅
2025-06-28 08:20:03
942
原创 【Linux网络】多路转接select、poll
摘要 本文介绍了select系统调用在Linux网络编程中的使用。select是一种多路复用I/O机制,用于同时监控多个文件描述符的状态变化。文章首先阐述了select的工作原理,即通过位图结构(fd_set)来跟踪文件描述符的就绪状态,等待底层数据可读或可写的事件通知。然后详细解析了select函数的参数和使用方法,包括文件描述符集(fd_set)的操作接口。最后,通过一个SelectServer的实现示例,展示了如何利用select构建服务器程序,包括初始化监听套接字、维护文件描述符数组、处理就绪事件等
2025-06-17 09:30:00
677
原创 【Linux网络】五种IO模型和阻塞IO
五种IO模型及其效率分析 文章通过钓鱼的生动比喻介绍了五种IO模型:阻塞IO(专注等待)、非阻塞IO(轮询检查)、信号驱动IO(信号通知)、多路复用IO(批量监控)和异步IO(完全托管)。核心观点指出IO效率取决于缩短等待时间占比,多路复用IO因批量处理就绪事件而效率最高。特别强调只有异步IO是完全非参与的异步操作,其他模型都涉及一定程度的同步等待。文章还介绍了通过fcntl函数设置非阻塞文件描述符的具体实现方法。这些模型的选择直接影响程序在IO密集型场景中的性能表现。
2025-06-14 14:27:48
1030
原创 【Linux网络】NAT、代理服务、内网穿透
本文系统介绍了三种网络连接技术:NAT通过IP地址转换解决IPv4不足问题,但存在连接限制;代理服务器分为正向代理(加速访问、内容过滤)和反向代理(负载均衡、安全防护);内网穿透借助公网服务器实现外部访问内网设备,支持P2P直连。这些技术各具特点,共同应对不同网络环境下的连接需求,同时各自存在相应的技术局限和应用场景。
2025-06-12 09:03:19
1023
原创 【Linux网络】数据链路层-MAC帧、ARP协议
本文介绍了计算机网络中数据链路层的核心概念。主要内容包括:1)数据链路层与网络层的区别,前者负责相邻节点间的可靠传输,后者处理端到端的路由;2)以太网作为主流局域网技术,其帧结构包含MAC地址、协议类型和校验字段;3)MAC地址的特性,如48位长度、出厂固化等;4)ARP协议的工作原理,该协议通过广播请求和单播应答实现IP到MAC地址的解析。文章通过对比IP地址与MAC地址的功能差异,阐明了数据链路层在局域网通信中的关键作用,并配以示意图说明ARP协议的运行机制。
2025-06-09 10:05:56
713
原创 【Linux网络】网络层-IP协议
本文主要介绍了IP协议的基本概念和关键技术。IP协议位于网络层,负责主机间通信,通过IP地址标识主机唯一性。文章详细解析了IP协议头格式,包括分片机制、TTL防环等核心字段功能。在子网划分方面,阐述了CIDR技术如何通过子网掩码灵活划分网络号与主机号,提高IP地址利用率。最后讨论了私有IP和公网IP的区别,指出NAT技术通过私有IP复用有效缓解了IPv4地址不足问题。全文系统性地梳理了IP协议的关键技术原理和应用场景。
2025-06-07 09:00:00
1446
原创 【MySQL】事务管理
事务是数据库操作的基本单位,确保操作的原子性、一致性、隔离性和持久性(ACID)。事务的提交方式包括自动提交和手动提交,操作方式包括开始事务、提交事务、创建保存点和回滚。事务隔离级别分为读未提交、读提交、可重复读和串行化,不同级别影响并发性能和数据一致性。MySQL默认隔离级别为可重复读,解决了幻读问题。一致性通过原子性保证,用户业务逻辑也需支持。读写并发中,MVCC通过多版本控制解决读-写冲突,Read View用于快照读操作,记录系统当前活跃事务信息。
2025-06-04 09:30:00
980
原创 【MySQL】索引特性
索引是提高数据库查询性能的关键工具,通过优化数据组织方式减少IO次数。MySQL使用B+树作为索引结构,主键索引和辅助索引分别采用聚簇和非聚簇方式存储数据。索引的创建需遵循一定规则,如频繁查询的字段适合创建索引,而更新频繁或唯一性差的字段则不适合。索引虽能显著提升查询速度,但会降低插入、更新和删除操作的效率。MySQL通过Page和Buffer Pool机制优化IO操作,减少磁盘与内存的交互次数,进一步提升性能。
2025-06-01 14:04:49
966
原创 【MYSQL】复合查询
本文介绍了SQL中的内置函数、多表查询、自连接、子查询和合并查询等常用操作。内置函数包括日期函数、字符串函数、数学函数等,用于处理日期、字符串和数值数据。多表查询通过笛卡尔积将多张表的数据组合,并通过条件筛选有意义的结果。自连接用于对同一张表进行查询,常用于查找员工与上级的关系。子查询分为单行、多行、多列子查询,用于嵌套查询和复杂条件筛选。合并查询使用union和union all将多个查询结果合并,前者去重,后者不去重。这些操作在数据库查询中广泛应用,帮助用户高效处理和分析数据。
2025-05-27 09:30:00
856
原创 【MySQL】基本查询
本文介绍了SQL中的基本操作,包括创建表、插入数据、查询数据、更新数据、删除数据以及使用聚合函数进行统计。首先,通过CREATE TABLE语句创建学生表,并使用INSERT语句插入数据,支持全列插入和指定列插入,同时介绍了ON DUPLICATE KEY UPDATE和REPLACE处理主键冲突的方法。接着,通过SELECT语句进行数据查询,支持全列查询、指定列查询、表达式计算和去重操作,并结合WHERE条件进行数据筛选。此外,使用ORDER BY对查询结果进行排序,LIMIT限制结果数量。在数据更新方面
2025-05-25 09:30:00
1029
原创 【Linux网络】传输层协议TCP(下)
本文详细介绍了TCP协议中的多个关键机制及其应用场景。首先,滑动窗口机制通过允许发送方在未收到确认应答的情况下继续发送数据,提高了传输效率。滑动窗口的大小由接收方的接收能力决定,并通过流量控制机制动态调整,以防止接收缓冲区溢出。其次,拥塞控制机制通过慢启动和加法增大策略,动态调整发送速率,以应对网络拥塞。延迟应答机制则通过延迟发送ACK应答,增加窗口大小,从而提高网络吞吐量。此外,文章还讨论了TCP中的粘包问题及其解决方案,以及TCP在异常情况下的处理机制,如进程终止和机器掉电时的连接管理。这些机制共同确保
2025-05-22 09:30:00
1370
原创 【Linux网络】传输层协议TCP(上)
本文详细介绍了TCP协议的核心机制和关键概念。首先,TCP协议段格式包括标准报头和有效载荷,通过四位首部长度进行分离。其次,确认应答机制通过序号和确认序号确保数据传输的可靠性,并支持捎带应答以提高效率。报头字段中的窗口大小用于流量控制,标志位则用于标识报文类型。超时重传机制通过动态调整时间间隔来应对网络环境变化,确保数据可靠传输。连接管理机制通过三次握手和四次挥手建立和断开连接,确保双方通信意愿和能力。最后,TIME_WAIT状态用于处理延迟报文,确保连接的彻底关闭。这些机制共同保障了TCP协议的高效性和可
2025-05-19 09:54:24
1051
原创 【Linux网络】传输层协议UDP
本文主要探讨了传输层中的端口号、UDP协议及其特点。端口号用于标识主机上不同程序的通信,TCP/IP协议中通过五元组(源IP、源端口号、目的IP、目的端口号、协议号)来标识通信。端口号分为知名端口号(0-1023)和动态分配的端口号(1024-65535)。UDP协议采用8字节定长报头,具有无连接、不可靠和面向数据报的特点,适合简单、高效的应用场景。UDP没有发送缓冲区,但有接收缓冲区,用于暂存接收到的报文。报文的封装和解包本质上是移动data指针在缓冲区中的指向。
2025-05-17 09:30:00
1723
原创 【Linux网络】HTTPS原理
而客户端只知道收到了公钥,并不清楚该公钥是不是服务端的,随后客户端使用公钥M将对称秘钥X进行加密后发送,中间人收到后使用私钥M’ 进行解密后得到对称公钥X,然后再用服务端的秘钥S加密后交给服务端,这样在双端知道秘钥X的同时,中间人也知道了,这也就不安全,和没加密没啥区别了,这也就是为什么上述凡是直接传公钥都不安全的本质原因。但后续服务端响应内容若使用私钥S加密后传输回客户端,由于公钥是公开的,那么该响应内容不仅是客户端,中间人若之前截取了公钥P,此时也能进行解密了,这里就不安全了。现在我们将一份数据用。
2025-05-14 09:30:00
1750
原创 【Linux网络】HTTP cookie与session
本文是HTTP协议的延展介绍,详谈了Cookie和Session的功能和用法,然后简单进行了部分核心代码的实现,帮助更好地理解其底层机制。
2025-05-12 09:23:54
672
原创 【Linux网络】HTTP协议
虽然我们说应用层协议是程序员自己定的,但实际上已经有一些大佬定义了一些现成的、非常好用的应用层协议,我们能够直接参考使用,如HTTP(超文本传输协议)就是其中之一。本文用于介绍HTTP的基本知识,以及自己实现最简单的一个HTTP的服务器,帮助理解HTTP协议的使用方法和实现本质。
2025-05-09 11:45:08
868
原创 【Linux网络】序列化、自定义协议、网络计算器实现源码
本文主要介绍了网络中的序列化与反序列化,这是协议中的的重要概念,基于该概念我们手动实现一个自定义协议来完成网络版计算器的实现,对其加深理解。在该Protocol协议中,我们实现了序列化和反序列化的方法,并且给出了读取报文不完整的方法。注意我们实现网络计算器的过程,需要的是结构化的数据,客户端传入Request,进行序列化后发送给服务器,服务器收到后进行反序列化,然后创建ResPonse,序列化后再发送给客户端,客户端收到后进行反序列化就收到了结果。
2025-05-06 09:57:07
591
原创 【Linux网络】UDP socket 实现线上聊天室
我们这里的func要知道它的任务是通过线程池将消息转发给所有在线用户,而所有在线用户在r的vector中,而线程池在tp中,因此这里设置一个lambda表达式,[]中引用捕获了r和tp以便使用。我们要把任务交给线程池里的任务,就必须把消息路由的函数传给线程池,那么我们就只能通过bind绑定参数来创建一个新的无参数无返回值的调用对象t,来交给线程池的任务队列。,这里有很多复杂的原因,但我们只需要了解一个,那就是绑定0.0.0.0能监听所有接口,包括公网、内网、本地。主机格式的存储可能是大端也可能是小端。
2025-04-29 09:06:05
623
原创 【Linux网络】网络入门、网络架构
本文作为Linux网络部分的基础先导课,介绍了有关网络的一些基本知识,包括协议分层、网络传输基本流程和Socket编程的预备工作等,可以说是一个计算机网络的入门课程。
2025-04-23 09:30:00
778
原创 【Linux线程】线程池实现(含完整源码)
某些类,只能具有一个对象,就称之为单例。例如一个项目中有一个非常大的配置类,就应该设计为一个单例,否则创建很多对象会十分浪费和占用资源,一个足以。
2025-04-20 09:30:00
746
原创 【Linux线程】线程池:日志文件(含完整源码)
本文介绍了线程池的概念,实现线程池是一个比较复杂的工作,本文从日志的概念到实现讲起,先进行日志的完整实现,封装到完整代码皆有,一步步实现。
2025-04-18 09:30:00
1557
原创 【Linux线程】生产者消费者模型
本文介绍了项目中至关重要的生产消费模型,介绍了其中生成者、消费者间的各种关系,并且给出了两种实现方法:阻塞队列和环形队列,并用代码仅了实现,加深理解。
2025-04-15 09:30:00
986
原创 【Linux线程】互斥:mutex锁、同步:cond条件变量
本文介绍线程的互斥和同步两种概念,使用模拟抢票的程序来理解线程互斥和同步的重要性,并介绍了互斥锁mutex和条件变量cond的使用方法以及对应函数,使用互斥锁完善代码后就不会出现bug了。
2025-04-12 09:30:00
651
原创 【Linux线程】线程概念、线程控制
本文介绍了线程的基本概率,区别Linux中概念和其他操作系统的本质区别,并详细介绍Linux中的轻量级进程和页表的底层实现,随后介绍线程控制的具体方法,简单介绍了pthread库中几个重要常用的线程函数,最后谈了线程和地址空间的关系,加深理解。
2025-04-09 09:30:00
1315
原创 【Linux信号】信号阻塞、捕捉信号、硬件中断
本文介绍了信号的三种状态:递达、未决、阻塞,同时对应 三张表handler、pending、block,谈了信号是如何捕捉的,设计内核态和用户态的切换,然后谈到了操作系统运行的机理,从底层角度理解操作系统是被中断驱动的软件,详谈了几个中断,最后再给出可重入函数、volatile等拓展概念。
2025-04-06 15:41:37
585
原创 【Linux信号】信号概念、产生、
本文介绍了信号的概念,是进程之间事件异步通知的一种方式,接着介绍了信号的处理方式有三种:忽略信号、采取默认处理函数、采取自定义处理函数,随后从硬件和软件两个角度谈了信号的产生方式,并简单罗列出软件中系统调用常用来产生信号的函数。
2025-04-03 09:30:00
659
原创 【Linux进程间通信】System V:共享内存、消息队列、信号量
本文介绍进程间通信的System V方式,该方法有三种方式,分别是shm共享内存、msg消息队列、信号量sem,本文着重介绍了shm共享内存的原理以及实现方法,随后简单介绍了msg消息队列和信号量sem,最后从Linux管理system的整体视角上学习Linux如何管理这三种通信方式。
2025-03-31 09:30:00
660
原创 【Linux进程间通信】匿名管道、命名管道、进程池
本文介绍了进程间通信的第一种方法:管道通信,详细讲解了其原理和实现方法,从匿名管道和命名管道两方面介绍了其特性,并给出匿名管道的应用--进程池和命名管道的应用 两个实现的完整代码,帮助深入理解和认知管道的特性和使用。
2025-03-28 09:30:00
1582
原创 【Linux】动静态库、ELF文件、链接与加载
本文介绍了Linux下动静态库的制作和使用方法,而后谈到可执行文件、动静态库等文件的ELF格式,介绍ELF文件的结构和作用,最后重新理解程序链接与加载的整个过程,从静态链接到动态链接的不过和详细过程。
2025-03-24 09:30:00
1150
原创 【Linux基础IO】文件系统(下)
本文介绍了文件系统的下半部分,从记录文件属性的inode到记录文件内容的数据块,理解磁盘内部结构,分区分组,分组内的构造有超级块,GDT等,随后理解inode和数据块的映射关系,重新看待目录和文件名,所谓目录其实也就是普通文件,再详谈路径问题:如何根据inode寻找文件,最后总的理解fopen,介绍软硬链接。
2025-03-21 09:30:00
957
原创 【动态规划】买卖股票的最佳时机(刷爆股票题)
本文的题目来自力扣买卖股票的最佳时机系列题目,共六题,如下图:该系列题考验的核心算法思想是动态规划,难度属于中上,第一题较为简单,这里拿来用作热身。121. 买卖股票的最佳时机 - 力扣(LeetCode)
2025-03-18 09:30:00
1090
原创 【Linux基础IO】文件缓冲区、文件系统(上)
本文介绍了缓冲区的概念和用户级缓冲区在C语言中的实例,随后初始文件系统,从底层硬件--硬盘出发,了解存储文件的底层原理,认识磁盘的储存结构和逻辑结构,和块、分区的概念,为之后深入理解文件系统铺垫。
2025-03-16 09:30:00
725
原创 【Linux基础IO】文件IO、文件描述符、重定向本质
本文先回顾了C语言文件围绕FILE*的IO的操作,随后介绍系统调用的open,close,write,read四个函数,接着了解Linux中围绕文件操作符fd的IO操作,探究文件描述符的本质是进程中文件描述符表的下标,最后理解重定向的本质底层原理。
2025-03-13 09:30:00
884
原创 【Linux进程控制】进程程序替换、自定义shell
本文讲解进程替换的exec系列函数共六个的不同使用方法和技巧,然后对其进行应用,初步自己实现了myshell来模拟命令行bash解释器。
2025-03-10 09:30:00
808
原创 【Linux进程控制】进程终止、进程等待
本文介绍了进程退出时的三种场景以及常见的退出方法,对比库函数exit和系统调用_exit的区别与联系,了解C语言中perror和errno的使用,随后介绍了进程等待这一重要的概念,详细讲解了waitpid的使用和它的重要参数status和option。
2025-03-07 10:18:40
663
原创 【Linux进程】进程地址空间深度解析
本文介绍了进程地址空间是操作系统给进程分配的地址空间,通过页表映射到物理地址,还讲解了页表的机理和作用,最后谈了地址空间存在的意义。进程地址空间不是真正的物理地址空间,而是虚拟的,是由OS进行转换的。我们可以这样理解,进程地址空间就是操作系统OS划给各个进程的大饼,让每个进程都以为自己有4GB的物理地址空间,每一个进程都认为自己在独占物理内存。老板:操作系统OS员工:进程大饼:虚拟地址空间然而OS要管理这些空间的分配,就必须先组织,再管理。所以地址空间也是一个结构体struct,那么内容是什么呢?
2025-03-04 09:30:00
800
原创 【Linux进程】环境变量
本文着重介绍环境变量这一概念,从常见的main函数的参数列表出发,介绍了Linux中执行命令的本质--就是运行程序+命令行参数,随后认识了bash中所有的环境变量和获取、修改环境变量的方法,认识环境变量表,和自定义环境变量的区别,认识指令分类为内建命令和常规命令我们可以在bash中直接定义环境变量,使用指令:环境变量名=内容然而用户自定义的环境变量是本地的,env表中并不会出现刚才在bash中自定义的环境变量,如果我们想把其放在系统的环境变量中,就需要使用指令:export 环境变量名。
2025-03-01 09:30:00
814
原创 【Linux进程】进程优先级、进程切换
本文介绍了进程优先级以及如何修改进程的优先级的具体做法,而后接收了进程间的四大关系,引出进程切换的概念,再从Linux2.6内核的进程调度队列底层出发,解析了活跃进程队列和过期进程队列的实现底层和原理。进程优先级就是CPU资源分配的先后顺序,优先级高的进程有优先执行的权利,能改善系统性能。优先级代表一定能得到申请的资源,只是得到的时间问题权限代表有没有资格得到申请的资源,是能否的问题使用指令:ps -l 或 ps -al来查看进程的优先级如上图红框中PRI代表进程优先级,值越小,优先级越高。
2025-02-25 08:31:11
938
原创 【Linux进程】进程状态:运行阻塞挂起、僵尸孤儿进程
本文介绍了什么是进程状态,大致分为运行、阻塞、挂起三种状态,随后介绍了在特定环境:linux中有的几种进程状态,分别是R运行状态,S睡眠状态,D磁盘休眠状态,T暂停状态,Z僵尸状态和孤儿进程,详细解析其产生原因和例子,最后介绍了Linux中内核链表的底层实现加深理解。strcut PCB...其他信息int state;//进程状态{将进程放入运行队列}{将进程放入阻塞队列}......
2025-02-21 09:30:00
1045
原创 【Linux进程】操作系统、进程概念、PCB底层、父子进程
本文开始介绍Linux进程相关,从操作系统的概念讲起,理解OS管理的本质是用struct描述+数据结构组织,理解进程的概念和Linux中的PCB,再学习进程相关的操作,最后拓展父子进程的理解和相应操作的本质。
2025-02-18 09:30:00
617
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人