当前位置: 首页 > ds >正文

进程与线程详解, IPC通信与RPC通信对比,Linux前台与后台作业

1. 进程与线程:核心差异(基础概念)

维度进程线程决策点
本质资源分配单位(独立虚拟地址空间)执行单元(共享进程资源)隔离性要求高 → 选进程;性能敏感 → 选线程
创建开销高(复制页表、文件描述符等)低(仅分配栈和寄存器)启动频繁任务 → 优先线程
崩溃影响仅自身终止,不影响其他进程崩溃导致整个进程终止安全关键系统 → 用进程隔离
典型场景浏览器标签页隔离、沙盒环境Nginx多线程处理请求、GUI事件循环高并发I/O服务 → 线程池优化

2. 进程状态:生命周期全景(状态驱动管理)

状态转换逻辑:新建 → 就绪 → 运行 → [阻塞/终止] → 终止
(关键:状态决定调度策略与操作方式)

状态定义触发条件Linux表示关注点
新建进程创建中(分配PCB)fork()系统调用-避免进程风暴(如fork爆炸)
就绪资源就绪,等待CPU调度等待时间片分配R高CPU利用率 → 优化调度策略
运行正在CPU执行指令被调度器选中RCPU瓶颈 → 检查top的%CPU
阻塞等待外部事件(I/O/信号量)磁盘读取、网络请求未完成

D(不可中断)

S(可中断)

高I/O等待 → 用异步IO(如epoll)
终止执行结束或被强制终止pkill,killallkill -9Z(僵尸)僵尸进程 → 必须用wait()回收
挂起暂停执行(换出内存)kill -STOP或内存不足T调试时暂停进程

3. 进程管理命令:状态操作实战(命令驱动状态)

命令核心作用关联状态典型场景技巧
ps aux查看实时状态(含状态字段)显示R/S/D/Z/Tps aux | grep nginx → 检查进程状态筛选关键状态:ps aux | awk '{print $8}' | sort | uniq|grep D
top -o %CPU实时监控资源与状态动态更新运行/阻塞排查CPU瓶颈(%CPU高且状态为RShift+P按CPU排序
kill -9 PID强制终止进程(无视状态)终止运行/阻塞状态进程卡死时快速回收仅作最后手段(避免数据丢失)
bg/fg作业前台/后台切换(状态转换)转换前台→后台/反之

Ctrl+Z挂起后→

bg 1%转后台

后台任务需nohup保活(终端关闭不终止)
nohup ./script.sh &使进程脱离终端独立运行保持后台状态长任务(如数据处理)避免&导致终端关闭终止进程

4. 前台/后台作业:作业调度实践(状态操作子集)

类型状态本质关键约束转换逻辑
前台作业占用终端,阻塞交互终端关闭 → 进程终止

启动:./script.sh

挂起:Ctrl+Z → 转为阻塞状态

后台作业独立运行,不占用终端无终端输入,需nohup保活

启动:./script.sh &

转前台:fg %1 → 转为运行状态

避坑

  • 后台任务必须用nohupscreen,否则终端关闭后进程被SIGHUP终止。
  • bg仅转换作业状态,不解决终端依赖问题。

5. IPC与RPC:进程间通信(状态外延)

核心区别:IPC是本地进程通信,RPC是跨网络的远程调用。

机制原理实现技术选择依据
IPC基于内核共享资源(无网络开销)共享内存 + 信号量<br>消息队列本地模块通信(如微服务内部) → 首选共享内存(性能最优)
RPC网络封装远程调用(抽象协议)gRPC(Protobuf序列化)<br>Thrift跨机房服务调用(如电商下单系统) → 首选gRPC(高效、强类型)

为什么不用IPC做跨机通信?
IPC依赖本地文件系统/内核,无法穿透网络 → RPC通过TCP/HTTP解决网络层问题。


6. 决策:技术选型全景图(终极指南)

场景方案为什么?避坑提示
安全隔离(如支付系统)进程 + 容器化进程崩溃不扩散,容器提供额外隔离避免用线程做安全边界
高并发I/O(如Web服务)线程池 + 异步IO(epoll)线程共享资源减少上下文切换,异步避免阻塞线程数 = CPU核心数 × 2
跨机房数据同步RPC(gRPC)网络透明化调用,Protobuf高效序列化避免用IPC做远程通信
本地模块高效协作共享内存 + 信号量0拷贝传输,比消息队列快10倍+需处理同步(信号量/互斥锁)
长任务后台运行nohup + & + 日志重定向终端关闭不终止,日志独立存储nohup ./script.sh > log.txt 2>&1 &
http://www.xdnf.cn/news/20148.html

相关文章:

  • Android入门到实战(八):从发现页到详情页——跳转、传值与RecyclerView多类型布局
  • 深度学习——ResNet 卷积神经网络
  • Python快速入门专业版(二):print 函数深度解析:不止于打印字符串(含10+实用案例)
  • Docker多阶段构建Maven项目
  • K8s资源管理:高效管控CPU与内存
  • React学习之路永无止境:下一步,去向何方?
  • Jmeter基础教程详解
  • STM32H750 RTC介绍及应用
  • 国产GEO工具哪家强?巨推集团、SEO研究协会网、业界科技三强对比
  • 用C++实现日期类
  • upload-labs通关笔记-第17关文件上传关卡之二次渲染jpg格式
  • 关于如何在PostgreSQL中调整数据库参数和配置的综合指南
  • Vue基础知识-脚手架开发-子传父(props回调函数实现和自定义事件实现)
  • Win11 解决访问网站525 问题 .
  • 【RK3576】【Android14】如何在Android kernel-6.1 的版本中添加一个ko驱动并编译出来?
  • Django 常用功能完全指南:从核心基础到高级实战
  • [光学原理与应用-401]:设计 - 深紫外皮秒脉冲激光器 - 元件 - 布拉格衍射在深紫外皮秒声光调制器(AOM)中的核心作用与系统实现
  • 小程序:12亿用户的入口,企业数字化的先锋军
  • Linux编程——网络编程(UDP)
  • 计算机网络模型入门指南:分层原理与各层作用
  • 对接旅游行业安全需求:旅游安全急救实训室的功能构建与育人目标
  • 网络安全初级-渗透测试
  • 用AI做TikTok影视解说,全流程全自动成片,不懂外语也能做全球矩阵!
  • 办公任务分发项目 laravel vue mysql 第一章:核心功能构建 API
  • 系统越拆越乱?你可能误解了微服务的本质!
  • 【Linux系统】线程同步
  • 正则表达式与转义符的区别。注意输入的东西经过了一次转义,一次正则表达式。\\转义是单斜杠\\在正则表达式也是单斜杠所以\\\\经过两道门才是字符单斜杠
  • MongoDB Change Streams:实时监听数据变化的实战场景
  • clickhouse迁移工具clickhouse-copier
  • Python EXCEL 小技巧:最快重新排列dataframe函数