
Linux高阶
文章平均质量分 75
爱吃涮毛肚的肥肥
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
epoll+线程池
`epoll_init` | `epoll_create` 创建实例 → 构造 `epoll_event`(边缘触发 `EPOLLET` + 读事件 `EPOLLIN`) → `epoll_ctl_add` 监听套接字 | 初始化 epoll,让服务器**高效监听新连接/数据事件** || `GET_TIME` | 用 `time_t` 获取当前时间 → `ctime_r`(线程安全)转字符串 → 移除换行符(`\n` 改 `\0`) | 为日志、响应生成**格式化时间字符串**,避免线程安全问题 |原创 2025-06-08 08:32:22 · 452 阅读 · 0 评论 -
Linux高阶——1124—
在服务器程序中,我们对网络IO的处理应该是分离的,具备一定的顺序逻辑,过程。2、开始监听(Select or Poll or Epoll)3、监听就绪,监听到sock有数据可读,或者有连接待处理’4、处理就绪,读写sock,或者三次握手。1、准备监听(IN、OUT、ERR)5、处理完毕,数据读取完毕,连接成功。1、多路IO转接技术。原创 2024-11-30 16:04:34 · 330 阅读 · 0 评论 -
Linux高阶——1124—多进程多任务&&多线程多任务&&多路IO转接技术
首先是稳定性问题,多进程模式较为稳定,某个进程异常退出与其他进程无关,但是多线程中,如果某个线程异常可能会导致进程退出。但当前的单进程和多进程均为主动处理IO,但这种主动方法不合理,当sock无事件时,不应该主动读取,浪费开销。等问题,在一些用户级线程下,线程无法得到时间片,所以在并发模型选择时要仔细斟酌,而后选择多进程亦或多线程。多线程模型,可以在内存调度开销更小的情况下,完成并发任务,提高CPU使用率,加快执行效率。代码层面与多进程也比较相似,当用户递达,为客户端创建处理线程,处理线程随客户端持续。原创 2024-11-29 20:47:21 · 355 阅读 · 0 评论 -
Linux高阶——1123—单进程多任务&&多进程多任务(阻塞IO)服务器
为了让服务端有更好的处理能力,单进程无法满足需求,所以要提升处理单元的数量,为每个客户端分配一个处理单元(Process),让客户端与处理单元绑定,有一个比较好的处理效果避免阻塞冲突,因为每个处理进程都会分配一个客户端,相互之间没有影响。原创 2024-11-24 14:48:50 · 384 阅读 · 0 评论 -
Linux高阶——1123—服务器基础&&服务器设备&&服务器基础能力
在CS架构下,client and server下,工程师研发服务器,经典的后端程序,为前端(客户端)提供数据处理支持、数据中转、数据持久化等功能,在互联网中,几乎所有的软件都需要服务器,作为服务器研发工程师,必须要了解服务器的运行模式,基本职责,掌握实现服务器能力。原创 2024-11-23 20:44:55 · 531 阅读 · 0 评论 -
Linux高阶——1117—TCP客户端&&服务端
ACCEPT(服务端socket,客户端的网络信息结构体,客户端网络信息结构体长度) ——客户端接收数据。BIND(需要绑定的socket,网络信息结构体的地址,网络信息结构体的长度)RECV(套接字sockfd,数据buf,数据长度size,选项,发送的长度)CONNECT(用于连接的socket,目标信息结构体,目标信息结构体长度)client_info——定义的结构体——包含port,ip,和创建的套接字。SEND(发送的人的sockfd,数据buf,数据包长度)成功后,可以直接使用。原创 2024-11-19 12:03:54 · 729 阅读 · 0 评论 -
Linux高阶——1116—SOCKET套接字基础
3、int sockfd,套接字描述符,后续用于数据传输,recv(int sock),send(sockfd),sendto(sockfd),recvfrom(sockfd)2、int sockfd,包含网络信息,默认下包含默认地址0.0.0.0与随机端口,因此sockfd创建后可以立即使用。1、在Linux操作系统中,sock为整型,也称int sockfd,sock描述符,后续网络通信都是用此描述符。套接字函数适用于各个语言和平台,除了API可以不同,其他概念理论或流程逻辑都相同。原创 2024-11-17 16:51:49 · 461 阅读 · 0 评论 -
Linux高阶——1116—环形队列&&生产者消费者
相比于线性队列,环形队列可以有效避免访问越界问题,使用下标访问队列元素时,到达末尾后下标归0,返回起始位置,使用下标运算即可array[5],下标为0、1、2、3、4,下标使用(index+1)%array_len计算环形队列构成:1、存储容器(数组)2、Front(头索引)——用于入队,向数组执行下标赋值3、Rear(尾索引)——用于出队,从数组中获取资源3、队列大小QUEUE_SIZE4、已用大小Size5、环形队列遍历依然采用环形遍历,尾追头。原创 2024-11-17 11:08:47 · 548 阅读 · 0 评论 -
Linux高阶——1110—死锁问题&&原子访问&&线程控制与调度线程同步
与互斥锁高度相似,一个线程占用资源后,其他线程无法访问如果是互斥锁会陷入阻塞(放弃cpu)等待,但是自旋锁不阻塞(不放弃cpu),重复申请,直到获取锁为止一般使用旋转锁时,线程是运行态的旋转锁的优势:线程使用锁的效率好,一些快速响应的场景比较适合使用旋转锁,但是线程开销比较大,持续占用cpu。原创 2024-11-13 18:49:30 · 2073 阅读 · 0 评论 -
Linux高阶——1110—线程安全问题&&解决方法
同步过程:发起调用,调用者需要等待被调用者的结果异步过程:发起调用,无需等待被调用的结果,当有结果后,此结果传出,无需主动获取阻塞和非阻塞:发起到产生结果,中间的等待过程阻塞:放弃cpu非阻塞:不放弃cpu。原创 2024-11-12 21:22:54 · 681 阅读 · 0 评论 -
Linux高阶——1109—线程函数&&线程属性&&线程分类
pthread_cancel(pthread_t tid)——传入目标线程tid,杀死取消线程如果目标线程没有系统调用事件,那么此线程无法被取消如果目标线程回收到-1,表示该线程是被cancel杀死的线程返回值不允许为-1,保留给cancel。原创 2024-11-12 19:00:32 · 1152 阅读 · 0 评论 -
Linux高阶——1109—线程概念&&线程函数
进程是最小的分配资源单位,线程是最小的调度单位1、进程与线程是包含的关系,一般情况下进程包含线程,各个线程间独立,拥有独立的代码与任务2、进程中分为主控线程和普通线程,主控线程是进程自带的默认的执行单元,普通线程都是后续创建的3、蜕变概念,如果线程中只有一个调度单元,独占资源,我们只关注进程但是如果某一刻,很多调度单位同时共享资源,我们关注线程4、每个进程都有PCB,线程有TCB,每个线程有独立的id5、主控线程——pid==LWP6、进程自带主控线程,后续主线程可以创建普通线程。原创 2024-11-09 13:16:13 · 524 阅读 · 0 评论 -
Linux高阶——1103—修改屏蔽字&&信号到达及处理流程&&时序竞态问题
sleep是系统函数,会触发系统调用,到内核层,在内核层处理信号后,再去调用pause时,因为信号被处理掉了,因此pause函数不会运行,会被挂起。函数中不包含全局变量和静态资源的使用,并且不访问共享资源,只使用临时或局部变量,这种函数是安全的,称为可重入资源。一般情况下,带有信号捕捉的进程,永远是main函数先执行,但是执行过程触发信号,永远是捕捉函数先一步执行完毕。——执行立即挂起,察觉信号唤醒,接触屏蔽字。系统到内核层,不能直接先处理信号,需要先处理上切的原因,如中断异常等,完成后才能处理信号。原创 2024-11-04 21:33:51 · 758 阅读 · 0 评论 -
Linux高阶——1103——Signal信号机制
处理动作:自定义动作捕捉函数捕捉函数需要开发者自行定义与实现,但是只有信号触发抵达进程,系统自动调用行为1中的忽略动作与行为2的忽略行为相比,结果一致,但是优先级不同,行为的优先级比动作高每个信号拥有自己的信号行为结构体,struct sigaction,自己定义修改结构体,对进程原有的结构体进行替换,因为所有默认信号行为结构体中的行为都是默认的。原创 2024-11-04 16:32:09 · 781 阅读 · 0 评论 -
Linux高阶——1102—创建多进程拷贝程序
并发程序开发,大多数时候并发程序相比传统的单进程,执行速度更快,更合理利用资源,效率更好,所以必须了解掌握并发应用开发1、如果一个执行单元得到的cpu越多,那它完成任务的时间越短,多进程可以获得更多的时间片缩减任务完成速度2、如果是多进程程序,当某个进程因为阻塞挂起放弃时间片,就近原则,会转移到相邻进程,提高cpu使用效率。原创 2024-11-04 14:41:31 · 815 阅读 · 0 评论 -
Linux高阶——1027—实现守护进程&&实现守护进程的开机启动
守护进程是孤儿进程,但是是工程师人为创建的孤儿进程,低开销模式运行,对系统没有压力将STDERROR重定向到文件中,避免屏幕抛出异常信息,避免在使用前台时,后台的守护进程输出到屏幕上需要把标准出错也要关闭,STDERR_FILENO,标准出错指的是,当使用open函数打开一个不存在文件时,会在终端上显示出来的错误重定向函数dup和dup2错误信息会通过STDERR_FILENO将异常抛出到显示器上,因此需要将错误信息重定向,不使用STDERR_FILENO流,而使用输出错误文件的文件描述符fd流。原创 2024-11-03 21:18:51 · 1326 阅读 · 0 评论 -
Linux高阶——1027—进程间关系相关
本章节介绍,进程间的各种关系:亲缘关系,终端进程,进程组,会话,孤儿进程,守护进程。原创 2024-10-31 20:10:08 · 911 阅读 · 0 评论 -
Linux高阶——1026—验证内存映射&&mmap函数使用
先创建一个映射文件,写入数据分为四个步骤1、打开映射文件设文件描述符,使用open函数获取文件大小,作为映射大小2、进行共享映射3、映射成功,关闭描述符close(fd);4、修改映射内存munmap释放映射的函数。原创 2024-10-31 14:16:11 · 716 阅读 · 0 评论 -
Linux——1026—进程间通信技术&&管道&&内存映射
有四个文件描述符指向管道,父进程的fds[0]和fds[1],以及子进程的fds[0]和fds[1],因此管道的引用计数为4,每close一次,引用计数会-1,直到引用计数为0时,系统会自动释放管道空间。第一次读端向管道内部写入3000,管道内容量变为1069,如果读端一直未读,下一次写端想要再次写入3000时,不能成功,系统会将写端强制挂起,等管道内容量>要写入数量时,唤醒写端。一个线程读取就可以,其他线程不会等待读取,避免多个线程同时阻塞,保留单个线程读取,其他线程执行其他任务,节省开销,提高效率。原创 2024-10-28 21:17:54 · 879 阅读 · 0 评论 -
Linux高阶——1020—计算进程数题&&僵尸进程的回收
进程结束以后,系统会把用户层所有的数据全部清空释放,内核层会把除PCB以外的数据释放掉,PCB的残留可能造成内存泄漏。调用第一行的fork,调用第二行的三个,和最后一行的一个fork,创建出4个进程。调用第二行第一个fork,调用第二行后两个和第三行的fork,创建出3个进程。调用第二行第二个fork,调用第二行第三个和第三行的fork,创建出2个进程。调用第二行第三个fork,调用第三行fork,创建出1个进程。2、僵尸进程占用PCB,影响创建进程的数量,影响进程创建。2、父进程是子进程的责任人。原创 2024-10-25 21:07:53 · 324 阅读 · 0 评论 -
Linux高阶——1020—进程状态&&进程原语
就绪态只能向运行态和终止态转化,不可以转化为其他状态。挂起和阻塞可以转化为就绪态,不可以直接转化为运行态。就绪和运行可以相互转化,相差的是时间片。父进程调用fork,创建一个子进程。运行态可以转化为任意一种其余状态。fork函数返回值为pid_t。任何状态都可以转化为终止。原创 2024-10-25 21:06:27 · 458 阅读 · 0 评论 -
Linux高阶——1019——进程基础
软件工程师一般使用高级语言进行软件开发客户端一般为前端,服务器研发为后端,但此时编写出来的一般均为程序当的运行起来时,将会变为的,程序是进程的前置状态程序占用磁盘空间,进程占用资源较多:内存、cpu、磁盘...如果程序执行后出现的进程对程序文件没有依赖,可以删除程序文件,删除后不影响进程执行。原创 2024-10-22 21:20:27 · 413 阅读 · 0 评论 -
Linux高阶——1013—正则表达式练习
问号放在+或者*后面,表示切换成非贪婪模式[^>]表示非右尖括号的都能匹配,直到找到href="为止[^"]表示向右匹配,到"为止因此,三个都能匹配。原创 2024-10-16 20:50:12 · 227 阅读 · 0 评论 -
Linux高阶——1013—正则表达式
一般使用正则表达式来查询数据。原创 2024-10-13 13:34:32 · 1151 阅读 · 0 评论 -
Linux高阶——0928—Github数据上传&markdown语言
仓库、提交、分支提交绿色:新加 红色:删除主分支master或main项目的存储单位——仓库 实际代码的存储单位——分支。原创 2024-10-06 19:47:10 · 453 阅读 · 0 评论 -
Linux高阶——0928—Github本地仓库与云端仓库关联
steam++选择Github和系统代理模式,一键加速即可。原创 2024-10-06 13:34:02 · 503 阅读 · 0 评论