news 2026/1/31 23:11:15

信号VS共享内存:进程通信谁更强?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
信号VS共享内存:进程通信谁更强?

信号机制与共享内存的对比分析

信号机制

信号是Linux系统中用于异步通信和事件通知的机制,适用于随机事件处理。其核心流程包括信号发送、接收和处理:

  1. 信号发送
    使用kill函数向目标进程发送信号:

    int kill(pid_t pid, int sig); // pid为目标进程ID,sig为信号编号(如SIGINT=2)
  2. 信号处理
    进程通过signal函数注册自定义处理逻辑:

    typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler);
    • SIG_DFL:恢复默认处理(如SIGINT默认终止进程)。
    • SIG_IGN:忽略信号。
    • 自定义函数:实现特定事件响应。
  3. 执行流程
    内核收到信号后暂停进程当前执行流,跳转到注册的处理函数,完成后恢复原流程。

共享内存

共享内存是进程间通信(IPC)的高效方式,直接映射内存区域供多进程读写:

  1. 创建共享内存
    通过ftok生成唯一键值,shmget申请内存:

    key_t ftok(const char *pathname, int proj_id); int shmget(key_t key, size_t size, int shmflg); // size为内存大小,shmflg如IPC_CREAT
  2. 映射与操作
    使用shmat映射到进程地址空间:

    void *shmat(int shmid, const void *shmaddr, int shmflg); // shmaddr=NULL由系统分配

    数据操作示例:

    memcpy(shm_ptr, data, size); // 二进制数据拷贝
  3. 清理资源
    断开映射并删除对象:

    shmdt(shm_ptr); // 撤销映射 shmctl(shmid, IPC_RMID, NULL); // 删除共享内存
信号与共享内存的差异
  • 通信方式
    信号是异步事件通知,共享内存是同步数据共享。

  • 阻塞行为
    共享内存无读写阻塞,需搭配信号/信号量实现同步;信号处理可能被中断。

  • 数据持久性
    共享内存数据持久化直至显式删除;信号仅传递事件无数据存储。

  • 应用场景
    信号适合轻量级事件通知(如进程终止);共享内存适合大数据量交换(如图像处理)。

系统命令
  • 查看IPC资源:ipcs -a
  • 删除共享内存:ipcrm -m <shmid>

通过合理选择机制,可高效实现进程间协作与数据交互。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/28 1:34:06

基于springboot + vue医院管理系统

医院管理 目录 基于springboot vue医院管理系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于springboot vue医院管理系统 一、前言 博主介绍&#xff1a;✌️大…

作者头像 李华
网站建设 2026/1/30 4:40:55

LangFlow导入已有LangChain代码的兼容性分析

LangFlow 导入已有 LangChain 代码的兼容性分析 在当前 AI 应用快速迭代的背景下&#xff0c;越来越多团队开始构建基于大语言模型&#xff08;LLM&#xff09;的工作流。LangChain 作为主流开发框架&#xff0c;凭借其模块化设计和灵活组合能力&#xff0c;已经成为许多项目的…

作者头像 李华
网站建设 2026/1/30 11:29:35

基于单片机的智能奶瓶(有完整资料)

资料查找方式&#xff1a;特纳斯电子&#xff08;电子校园网&#xff09;&#xff1a;搜索下面编号即可编号&#xff1a;T5332310M设计简介&#xff1a;本设计是基于单片机的智能奶瓶&#xff0c;主要实现以下功能&#xff1a;通过称重模块进行奶瓶称重&#xff0c;进行显示屏显…

作者头像 李华
网站建设 2026/1/30 12:00:08

基于单片机的恒温储物箱设计(蓝牙RX TX反了)(有完整资料)

资料查找方式&#xff1a; 特纳斯电子&#xff08;电子校园网&#xff09;&#xff1a;搜索下面编号即可 编号&#xff1a; T5362305M 设计简介&#xff1a; 本设计是基于STM32的恒温储物箱&#xff0c;主要实现以下功能&#xff1a; 1.可检测温度 2.可通过加热片与制冷片进…

作者头像 李华
网站建设 2026/1/30 14:02:23

LangFlow性能优化建议:减少延迟提高响应速度

LangFlow性能优化建议&#xff1a;减少延迟提高响应速度 在AI应用开发日益普及的今天&#xff0c;快速验证一个大模型&#xff08;LLM&#xff09;驱动的产品构想&#xff0c;往往比写出完美代码更重要。LangChain作为构建语言模型系统的主流框架&#xff0c;功能强大但上手门槛…

作者头像 李华