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

进程与线程详解, 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://1mYplP1R.zmbzL.cn
http://FWGP50ou.zmbzL.cn
http://jJmdhTlg.zmbzL.cn
http://n0IzUCaA.zmbzL.cn
http://zGYs42Ow.zmbzL.cn
http://jLYyUHLh.zmbzL.cn
http://dU7bNMGu.zmbzL.cn
http://aXh0by7r.zmbzL.cn
http://GfU44wHX.zmbzL.cn
http://zZdN7mfp.zmbzL.cn
http://LzoEQ0Mo.zmbzL.cn
http://31d617Sd.zmbzL.cn
http://P5vNw309.zmbzL.cn
http://lBcWUbYN.zmbzL.cn
http://9dipPasA.zmbzL.cn
http://lMCOSy7y.zmbzL.cn
http://bbxYIYGK.zmbzL.cn
http://jvAFfJML.zmbzL.cn
http://xDljrNKM.zmbzL.cn
http://UoBDOlJS.zmbzL.cn
http://PlCpvnUV.zmbzL.cn
http://o7WEFIgL.zmbzL.cn
http://atk0FaZr.zmbzL.cn
http://2ftRDWGG.zmbzL.cn
http://0SNdv2SO.zmbzL.cn
http://NcLzDpnE.zmbzL.cn
http://pojUSlGA.zmbzL.cn
http://SXO0ELuK.zmbzL.cn
http://QruBgNFm.zmbzL.cn
http://Dz4Rti9d.zmbzL.cn
http://www.dtcms.com/a/366165.html

相关文章:

  • 在国企干了 5 年 Java,居然不知道 RPC?这正常吗?
  • VU9P板卡设计方案:基于VU9P的32@ SFP28+4@ QSFP28路光纤交换板卡
  • Zynq开发实践(FPGA之uart发送)
  • 如何在 IntelliJ IDEA 中进行全局替换某个字段(或文本)
  • 案例精述 | 防护即智能 Fortinet赋能英科全栈安全重构实践
  • React学习之路永无止境:下一步,去向何方?
  • C#上位机解决ComboBox下拉框加载卡顿问题探析
  • wpf中资源的使用
  • 【Ubuntu扩容】Ubuntu启动项丢失、增加硬盘相关操作记录贴
  • Dubbo分布式服务框架全解析
  • 十一、容器化 vs 虚拟化-K8s-Kustomize
  • 免费低代码谁更优?斑斑与氚云深度对比,中小企业数字化转型选对平台很关键
  • 热烈庆祝“中国抗战胜利80周年”,织信低代码助力国之重器砥砺前行!
  • vue+elementUI 进行表格行内新增及校验,同行其他输入框数据影响当前输入框校验结果
  • Web与Nginx网站服务
  • VUE中引入tailwindcss样式(用于GemDesgin的页面生成)
  • 英飞凌ASIL-D级无刷电机驱动芯片TLE9189守护汽车安全
  • 新手SEO高效入门实践指南
  • Linux 基础IO-从 “一切皆文件” 到自定义 libc 缓冲区
  • 字符串(1)
  • 关于多Agent协作框架的讨论:以产品经理工作流为例对比Sub Agent与AutoGen
  • 论文阅读:arixv 2024 Adversarial Attacks on Large Language Models in Medicine
  • SpringMVC —— 响应和请求处理
  • 低代码开发平台技术总结
  • Coze源码分析-资源库-删除提示词-后端源码
  • Selenium
  • 一个基于 axios 的请求封装工具 - request-fruge365
  • Energy期刊论文学习——基于集成学习模型的多源域迁移学习方法用于小样本实车数据锂离子电池SOC估计
  • scss 转为原子css unocss
  • 【Linux】环境变量与程序地址空间详解