Linux多进程、多线程、IO模型
文章平均质量分 87
百亿苍狗
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
io-poll底层原理分析,io-epoll基本原理与应用、控制与等待、原理分析
应⽤层调⽤ poll 函数,在内核会调⽤ sys_poll, sys_poll 函数定义在内核源码的 fs/select.c ⽂。在 ep_ptable_queue_proc 中 将 ep_poll_callback 回调函数添加到等待队列,驱动最后会关联。在上⾯的函数实现中,在没有⽂件描述符就绪时,会让进程睡眠, 等待 ep_poll_callback 来进。当内存分配好之后,就会将在⽤户空间的传递到内核的 struct pollfd 数组拷⻉到内核的空间中。原创 2025-08-09 19:45:10 · 839 阅读 · 0 评论 -
io-select、io-poll基本原理与应用
一、进程处理多路请求在没有多路复用IO之前,对于多路IO请求,一般只有阻塞与非阻塞IO两种方式阻塞IO需要结合多进程与多线程每个进程线程处理一路IO缺点客户端越多,需要创建的进程线程越多,相对占用内存资源较多非阻塞IO单进程可以处理,但是需要不断检测客户端是否发出IO请求,需要不断占用cpu,消耗cpu资源二、多路复用简介本质上就是通过复用一个进程来处理多个请求,基本思想如下由内核来监控多个文件描述符是否可以进行I/O操作。原创 2025-08-09 19:22:54 · 641 阅读 · 0 评论 -
10.3 条件变量
step 4 : 唤醒后,从 pthread_cond_wait 返回,消费条件满⾜,则正常消费产品。step 1 : 消费者线程判断消费条件是否满⾜ (仓库是否有产品),如果有产品可以消费,则可以正。防⽌在调⽤ pthread_cond_wait 函数等待⼀个条件变量收到唤醒信号,另外⼀个线程。⼀旦线程唤醒,需要重新竞争锁, 重新获得锁之后, pthread_cond_wait 函数返回。等待条件变量收到信号时 **,该函数重新竞争锁,并获取锁后,函数返回 **原创 2025-07-28 20:38:06 · 802 阅读 · 0 评论 -
创建多个线程、线程间通讯、线程互斥锁、线程同步
设计⼀个结构 struct perosn , 包含名字与年龄,在主线程中定义结构体变量,并传递到⼦线程进⾏打印。如果两个线程访问的是同⼀个 pthread_mutex_t 变量,那么它们访问了同⼀个互斥锁。当⼀个线程 A 获得锁, 另外⼀个线程 B 在获得锁则会阻塞,直到线程 A 释放锁, 线程。创建两个⼦线程,定义⼀个全局变量 global = 0, ⼦线程对这个全局变量进⾏加 1。创建多个线程时,⼀般由主线程统⼀创建,并等待释放资源或者分离线程,多个线程如果任务相同,则可以使⽤同⼀个线程执⾏函数。原创 2025-07-28 20:26:56 · 1113 阅读 · 0 评论 -
进程间通讯-信号量同步,线程的概念、相关命令、创建、退出、等待与分离
创建⽗⼦进程,输出 “ABA” 字符串,具体需求如下:⽗进程 输出 A⼦进程 输出 B⽗进程 输出 A ,输出换⾏能够循环输出 “ABA” 字符基本思路:通过创建⼀个信号量集合,包含 2 个信号量,⼀个信号量 编号为 0)控制⽗进程的运⾏与暂停,⼀个信号量 编号为 1) 控制⼦进程的运⾏与暂停控制逻辑:信号初始化SEM_CONTROL_P : 初始化为 1SEM_CONTROL_C : 初始化为 0⼦进程:占⽤ SEM_CONTROL_C , 此时⼦进程阻塞。原创 2025-07-28 20:09:38 · 1710 阅读 · 0 评论 -
进程间通讯-共享内存、信号量
共享内存是将分配的物理空间直接映射到进程的⽤户虚拟地址空间中, 减少数据在内核空间缓存。注意 : 在使⽤ IPC_RMID 时,第 三个参数会被忽略, 下⾯是帮助⽂档中的说明。成功 : 根据不同的命令有不同的返回值, 可以查看帮助⽂档关于 RETURN 的说明。IPC_NOWAIT : ⾮阻塞,在信号量的值为 0 时, 会⽴即返回。: ⼀般指的是信号量 的值为 1, 可以理解为只对应⼀个资源。信号量编号, 从 0 开始, 在 sem_op 的帮助⽂档中。原创 2025-07-28 19:39:32 · 612 阅读 · 0 评论 -
进程间通讯-信号(三)、-消息队列
inode 节点号 :每个存在的⽂件操作系统都会有唯⼀的编号, 通过 ls - i 命令查看。创建两个⼦进程 A 与 B,⽗进程分别给两个⼦进程发型消息,消息类型为 100 与 200。探测⽤户是否已经输⼊,如果⽤户在 3 秒内没有输⼊则提示超时⼀次, 如果超时三次程序⾃动。⼦进程退出是异步事件, 可以利⽤在⼦进程退出时,会⾃动给⽗进程发送 SIGCHLD 信。消息队列具有⼀定的 FIFO 特性, 具有⽆名管道与有名管道的各⾃的优势,消息队列就是⼀个消息的列表, 进程可以在消息队列中添加消息和的读取消息。原创 2025-07-28 19:18:21 · 607 阅读 · 0 评论 -
进程间通讯-有名管道,信号(一)、信号(二)
创建两个⼦进程 A 与 B,给⼦进程 A 发送 SIGUSR1 信号, ⼦进程 B 发送 SIGUSR2 信号,⼦进程 A 的处理⽅式设置为默认, ⼦进程 B 的处理⽅式为使⽤⾃定义处理函数,并打印接收的信号的字符串信息(使⽤ strsignal() 函数)信号是在软件层次上 是⼀种通知机制, 对中断机制的⼀种模拟,是⼀种异步通信⽅式, ⼀般具有。如果有名管道的⼀端以只读⽅式打开,它会阻塞到另⼀端以写的⽅式 (只写,读写)创建⼀个⼦进程, ⽗进程给⼦进程发送 SIGUSR1 信号,并使⽤⾃定义的处理。原创 2025-07-28 18:02:08 · 732 阅读 · 0 评论 -
进程的等待、替换和通讯-无名管道
在⼦进程运⾏结束后,进⼊僵死状态, 并释放资源, ⼦进程在内核中的 数据结构 依然保留⽗进程 调⽤wait()与waitpid()函数等待⼦进程退出后,释放⼦进程遗留的资源注意在 wait 存储在 satus 变量的值, 存储了很多信息, 通过⼀系列 W 开头的宏来解析获取WIFEXITED(status) : 进程是否正常结束WEXITSTATUS(wstatus) : 获取进程退出状态值, exit 函数的参数。原创 2025-07-28 17:42:19 · 879 阅读 · 0 评论 -
进程的创建、多任务和退出
进程的创建进程的创建1. 进程的创建为了提⾼计算机执⾏任务的效率,⼀般采⽤的解决⽅案就是能够让多个任务同时进⾏,这⾥可以使⽤并发与并⾏两种⽅式并⾏ : 在 cpu 多核的⽀持下,实现物理上的同时执⾏并发 : 在有限的 cpu 核⼼的情况下(如只有⼀个 cpu 核⼼) , 利⽤快速交替 (时间⽚轮转) 执⾏来达到宏观上的同时执⾏并⾏是基于硬件完成,⽽并发则可以使⽤软件算法来完成, 在完成任务时,可以创建多个进程并发执⾏。原创 2025-07-28 17:26:25 · 1080 阅读 · 0 评论 -
进程状态管理与相关命令
0.7 sy:内核空间占⽤ CPU 时间的百分⽐(Linux 内核态占⽤的 CPU 时间,系统 CPU 占⽤。0.0 ni:占⽤ CPU 时间的百分⽐(ni 是 nice 的缩写,进程⽤户态的优先级,如果调整过优先。0.0 wa:等待输⼊输出的 CPU 时间百分⽐(CPU 的处理速度是很快的,磁盘 IO 操作是⾮常。级,那么展示的就是调整过 nice 值的进程消耗掉的 CPU 时间,如果系统中没有进程被调整过。c : 切换显示模式,共有两种模式,⼀是只显示执⾏档的名称,另⼀种是显示完整的路径与名称。原创 2025-07-28 17:12:21 · 924 阅读 · 0 评论 -
1.2 进程的地址空间
⼀旦进程建⽴之后, 系统则要为这个进程分配相应的资源, ⼀般系统会为每个进程分配 4G 的地。当⽤户进程需要通过内核获取资源时, 会切换到内核态运⾏, 这时当前进程会使⽤内核空间的资。虚拟地址通过映射的⽅式建⽴与物理地址的关联, 从⽽达到访问虚拟地址就可以访问到对应的物。: 未初始化过的全局变量(包括初始化为 0 的, 未初始化过的静态变量 (包括初始。通过虚拟地址空间可以实现每个进程地址空间都是独⽴的,操作系统会映射到不⽤的。: 虚拟地址并不代表真实的内存空间, ⽽是⼀个⽤于寻址的编号。原创 2025-07-27 11:08:31 · 182 阅读 · 0 评论 -
1.1 进程的概念_物联⽹
在同—时间段有多个任务在同时执⾏,由操作系统调度算法来实现,⽐较典型的就。进程描述是—个程序执⾏过程,当程序执⾏后,执⾏过程开始,则进程产⽣。进程—旦产⽣,则需要分配相关资源,同时进程是资源分配的最⼩单位。,它是—些保存在磁盘上的指令的有序集合,没有任何执⾏的概念。,它是程序执⾏的过程,包括了动态创建、调度和消亡的整个。系统中,所有的进程,即正在执⾏的程序。每个进程都需要与其他某—个进程建⽴。—旦结束进程,就意味着进程结束。进程是—个独⽴的可调度的活动。对应的进程则叫做⽗进程。进程是—个动态的概念。原创 2025-07-27 10:59:41 · 152 阅读 · 0 评论
分享