当前位置:  技术问答>linux和unix

linux下进程间通讯方案选择问题

    来源: 互联网  发布时间:2015-12-23

    本文导语:  有一个精灵进程A,用于从特定设备接收和处理数据;有一个控制进程B,用于对设备进行控制。要求在控制进程B启动后,精灵进程A停止对设备数据的接收(由于设备设计原因必须停止收),B退出后A恢复接收。精灵进程A是...

有一个精灵进程A,用于从特定设备接收和处理数据;有一个控制进程B,用于对设备进行控制。要求在控制进程B启动后,精灵进程A停止对设备数据的接收(由于设备设计原因必须停止收),B退出后A恢复接收。精灵进程A是长期运行的,B则只在需要时启动。这就必然要求A,B之间的通讯。由于大部分时间B都不处于运行状态,出于性能需要,我们不希望A在探测B是否运行时花太多的开销,那么应该使用什么通讯方式好呢?请大虾指教

|
楼上的是可以的,我有另一种想法:
精灵进程A 启一个socket线程
控制进程B 启动的时候来进行连接,将需要停止的设备信息发给A

这样可以避免 A 长时间的查询 B的状态,只要等待socket连接即可

|
B进程启动后先将设备号写入共享内存(什么管道,文件,消息队列等等都行),然后给A发送信号。A收到信号后读取共享内存获得设备号即可。

不需要多线程,注册一个信号处理函数即可。不过从模块的耦合性角度来说,赞同你的socket方法。

|
这个问题,不能片面的站在IPC技术实现角度考虑。容易考虑不清楚,所谓站得高才看得远。这实际上是个对资源的抢占问题。B进程具有较高的优先级,就可以抢占A占用的任一资源。用完再归还给A("用"和"接收数据"在抽象上来讲是一样的).能最好的契合这一模型的IPC方式就是最好的选择。

而抢占这一行为需要仲裁。所以我认为最好的模型就是你还需要第三个进程仲裁者C。由它决定A,B的运行行为,A,B都同C进行通信。平时他们都可以处在休眠状态,如select/sleep/lock住等。 至于具体通信方式任何一种都行。这仅仅是具体情况下的需求。若你想分布于多台计算机,那用socket。若位于同一台机器,你可以选择IPC的所有方式(从通信速率角度,shm,pipe,message que,fmap,socket依次递减,但相对于你的应用基本可以忽略不计)。signal方式我觉得不好。虽然32以后的实时信号是可以携带附加信息的。但由于你的应用有慢系统调用,信号方式的处理可能变得很复杂(因为你可能需要恢复被中断的系统调用,和可重入系统调用的同步问题),而且这样的代码也不可移植,众所周知,不同的系统的有些信号语义不同。

|
倾向于使用本地socket通讯,起始socket通讯很简单,就是对本地临时文件进行操作,但它很灵活,从B接收到的数据, 要干什么,针对谁,都可以通过定义通讯格式来处理。

    
 
 

您可能感兴趣的文章:

  • linux僵尸(zombie)进程介绍及清除
  • 高手请教!linux怎样通过pid获取进程信息,如:进程名、进程状态等?
  • linux下进程占用内存空间详解
  • linux命令如何实现重启父进程而不会使其子进程退出
  • Linux进程的内核栈和用户栈概念,相互关系及切换过程
  • Linux中最多同时可以开多少个进程,一个进程可以开多少个线程?
  • linux下进程间通信:共享内存原理及具体用法举例(基于c/c++语言)
  • Linux守护进程 的子进程 终端处理
  • Linux内核进程与应用进程的通信方式有哪些?
  • 在linux,如何用共享内存来实现进程间的通讯?(这些进程没有父子关系)
  • linux下system函数调用shell命令后,怎样让主进程不等子进程返回,接着执行(在线)?
  • linux进程(线程)运行过程中如何获取本进程当前的内存使用状况,统计信息?
  • 如何linux下监控进程及其子进程占用资源?
  • linux下的进程如何访问另外一个进程建立的mutex?
  • jquery iis7站长之家
  • linux内核高手进!关于调用__fork()时0号进程的子进程才能与父进程共享PID的困惑
  • 请教:在Linux下怎么样检测一个进程是否是僵尸进程??
  • 请问linux进程的哪些信息保存在内核里?哪些信息又保存在进程空间里?谢谢
  • Linux下请教一个父进程杀死子进程的问题.
  • 怎么查看Linux中所运行的进程,并且知道哪些是停止响应的,用什么命令可以杀掉停止响应的进程?
  • 【求助】linux/Unix下创建子进程,向父进程发送信号,子进程也能收到改信号,此时如何让子进程不收到信号
  • 在虚拟Linux系统下能进行串口通讯吗?最好给个串口通讯的代码!谢谢!
  • WINDOWS 和 LINUX通讯
  • Linux语音通讯软件 Twinkle
  • LINUX下的JAVA串口通讯问题,如能解决,不胜感激
  • linux下怎样实现进程间的通讯,急用啊 !!!!!!!!!!!
  • 虚拟机上装了linux之后怎么跟windows通讯?
  • windows和linux进行socket通讯问题(高手请进!)
  • 你们在LINUX下面使用什么即时通讯联系工具?
  • 求Linux下开发拥有USB通讯功能的资料
  • linux 驱动中想用 kobject_uevent 和应用程序通讯. 但不知如何用?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 各位能不能说选择Linux不选择Windows的理由?
  • vim块选择,可以用长方形的方式选择数据:ctrl+v怎么没有效果呢。我是linux环境的。
  • 请教linux下的编程的选择:我听说有gtk+gnome的编程,也有kde里的 什么编程,到底应该选择哪个呢?好象一个是技术好一点,一个是市场占有
  • 如果要用Linux作WEB服务器选择什么Linux较好?
  • Linux/Unix的功能??选择windows还是linux?
  • 请教我先前装了Windows Server 2003,再装Ret Hat Linux 9,开机时,会提示选择操作系统,现在我重装Window Serever 2003,开机不会提示选择
  • 如何选择linux系统安装模块?
  • 求助:安装linux时候叫我选择硬盘。
  • Linux与Win2000共存,选择启动Linux的时候,到Starting system logger:处停住不动了,怎么回事?
  • 如何选择linux系统
  • 为何我只能装linux7.1,一装7.1以上版本的linux就在选择分区时死掉?请求帮助
  • (100分)怎么把开机后的dos和linux的选择画面找回来。
  • Linux下C++开发的IDE环境选择
  • 安装Linux,界面一直停留在选择语言的界面
  • 请教:嵌入式Linux交叉编译工具----版本选择的问题
  • 我装了多系统,现在把linux删了,但是开机还是有linux 要你选择系统的画面,怎样让我的机子不显示这个画面啊~~??
  • 初学linux编程该选择哪本书?
  • 我的LINUX为什么不能选择启动,只能用启动盘启动
  • 我安装linux的时候没有选择x windows现在还能装吗?
  • 在linux下安装软件,如何选择安装路径?
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • secureCRT下Linux终端汉字乱码解决方法
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • Linux c字符串中不可打印字符转换成16进制
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • linux命令大全详细分类介绍及常用linux命令文档手册下载
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3