linux
文章平均质量分 84
未来的酱
这个作者很懒,什么都没留下…
展开
-
5种IO模型(select,poll,epoll)
IO模型有5种,包括阻塞IO,非阻塞IO,信号驱动IO,异步IO,以及多路转接IO。最后一部分单独描述。 首先 阻塞IO 概念:在内核准备好数据之前,系统调用会一直等待数据,将数据从内核态拷贝到用户态后,返回系统调用。 特点:流程简单,顺序化处理,但对资源的利用率不高。 非阻塞IO 概念:如果内核还没有将数据准备好,系统调用会直接返回,返回错误码。通过循环的方式反复尝试读写文件描述符,指到内核准备好数据,返回系统调用。 特点:流程较为复杂,也是顺序化处理,不够实时。 信号驱动IO 概念:通过定义原创 2021-03-31 10:57:53 · 317 阅读 · 0 评论 -
进程信号
初识信号: 信号是一个软件中断,通知进程发生了某个事件,打断进程当前的操作,去处理这个事件。 有三种处理方法: 1忽略此信号 执行该信号的默认处理方法 提供一个信号处理函数,改变默认的处理方法,要求内核在执行到该信号时切换到用户态执行这个默认的信号处理函数,此操作称之为捕捉信号 系统定义的信号列表中,1-31是非可靠信号,45-64是可靠信号。 kill杀死一个进程的原理: 给进程发送一个信号(默认发送15号信号)进程收到信号处理事件(默认为退出) 信号的几种产生方式 通过终端按键产生信号 通过系原创 2021-03-26 18:12:34 · 115 阅读 · 1 评论 -
基础IO介绍
包括以下部分的总结: 标准库IO接口与系统调用IO接口 文件流指针与文件描述符 系统调用与库函数的关系 文件系统中的inode节点 软链接与硬连接 动态库与静态库 C标准库IO接口(库函数) man 手册 ----3 fopen,fwrite,fread,fseek,fclose FILE *fopen(char *filename,char *mode) mode:r 只读, r+ 读写;w 只写, w+读写;a 追加只写 数据总是写入文件尾部,a+追加读写;b对文件数据进行二进制操作 si原创 2021-03-22 11:20:19 · 1146 阅读 · 4 评论 -
进程间通信总结---共享内存,消息队列,信号量
共享内存: 本质:开辟的一块物理内存,多个进程通过将同一块物理内存映射到自己的虚拟地址空间,通过自己的虚拟地址空间进行访问,实现数据共享。 特点:共享内存是最快的进程间通信方式(操作相较于其他操作,少了两步用用户态到内核的数据拷贝),生命周期随内核 操作流程 1.创建/打开共享内存 int shmget(Key_t key,size_t size,int shmflg) key 共享内存的标识符—多个进程通过同一个标识符打开同一个共享内存; size 共享内存的大小 shmflg 操作方式 -IPC_CR原创 2021-03-19 18:24:38 · 177 阅读 · 0 评论 -
进程间通信总结---管道(命名管道与匿名管道)
1.进程间有哪些通讯方式: 管道 消息队列 共享内存 信号量 2.为什么进程间不能直接通信? 因为每个进程具有独立性,每个进程都有自己的虚拟地址空间,进程只能访问自己的虚拟地址空间,无法直接访问其他进程的虚拟地址空间,因此不能直接通信。 3.进程间通信传递什么? 数据传输,资源共享,通知事件,控制进程 4.管道 管道特点 管道具有半双工通信,同步与互斥,提供字节流服务,生命周期随进程 同步与互斥: 同步:让进程按照某种规则,有序的进行资源的访问,保证访问的合理性。 互斥:临界资源(进程都能访问到的资源)同一原创 2021-03-19 14:19:46 · 418 阅读 · 0 评论 -
线程池及代码实现
线程池 概念:线程池是一种线程的使用方式,线程过多会带来调度开销,影响缓存局部性和整体性能。线程池中维护着多个线程,外部只需要提供要处理的数据和处理数据的方法,线程池中的线程就可以进行处理。避免了处理短时间任务时创建和销毁线程的代价。同时可以保证内核的充分使用以及防止过分调度。 使用场景:1>需要大量线程来完成任务,并且每个任务执行时间很短。2>对性能高要求的应用。3>服务器有突然并发很多任务的情况存在,因为短时间内产生大量线程可能使内存达到极限,出现错误。 使用方法:创建固定数量的线程原创 2020-08-04 18:28:08 · 195 阅读 · 0 评论