• Linux进程通信



    进程的数据空间是独立的,私有的,不能相互访问,但是在某些情况下进程之间需要通信来实现某功能或交换数据,包括:

    1)数据传输:一个进程需要将它的数据发送给另一个进程。

    2)共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。

    3)通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如通知进程退出)。

    4)进程控制:一个进程希望控制另一个进程的运行。

    一、进程通信

    进程通信的方式大概分为六种。

    1)管道:包括无名管道(pipe)及命名管道(named pipe),无名管道可用于具有父进程和子进程之间的通信。命名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。

    2)消息队列(message):进程可以向队列中添加消息,其它的进程则可以读取队列中的消息。

    3)信号(signal):信号用于通知其它进程有某种事件发生。

    4)共享内存(shared memory):多个进程可以访问同一块内存空间。

    5)信号量(semaphore):也叫信号灯,用于进程之间对共享资源进行加锁。

    6)套接字(socket):可用于不同计算机之间的进程间通信。

    二、应用经验

    1)管道和消息队列太过时了,实在没什么应用价值,了解概念就行。

    2)socket可以用于不同系统之间的进程通信,完全可以代替只能在同一系统中进程之间通信的管道和消息队列。

    3)信号的应用场景非常多,主要用于进程的控制,例如通知正在运行中的后台服务程序退出。

    4)同一系统中,进程之间采用共享内存交换数据的效率是最高的,但是,共享内存没有加锁的机制,所以经常与信号灯结合一起来使用,在高性能的网络服务端程序中,可以用共享内存作为的数据缓存(cache)。

    三、版权声明

    C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。
    来源:C语言技术网(www.freecplus.net)
    作者:码农有道

    如果文章有错别字,或者内容有错误,或其他的建议和意见,请您留言指正,非常感谢!!!

  • 相关阅读:
    运输计划[二分答案 LCA 树上差分]
    树的重心与树的直径
    约瑟夫问题
    [The 2019 Asia Yinchuan First Round Online Programming] D Take Your Seat
    CF858F Wizard's Tour
    当那一天来临
    NOI2000 青蛙过河[递推]
    BZOJ4305 数列的GCD
    中国剩余定理和扩展中国剩余定理
    重写select
  • 原文地址:https://www.cnblogs.com/wucongzhou/p/12497888.html
Copyright © 2020-2023  润新知