• linux 消息队列使用经验


    概述:

    消息队列是linux下进程间通信的一种方式,一般用于传送少量数据,如果大量数据需要在进程间共享,则可以用共享内存。

    函数接口使用:

    linux下提供了以下几个接口,用于消息队列的使用,使用一般过程如下:

    1. 调用ftok接口产生一个key.

        使用ftok的好处是,访问同一个消息队列的不同进程可以通过同一个文件访问相同的队列.

        另外,如果文件被删除,即使重新产生后内容一模一样,仍然可能产生不同的key ,因为文件的inode与key值的产生有关。

    2. 调用msgget(使用key作为参数)产生一个队列

    3. 进程可以用msgsnd发送消息到这个队列,相应的别的进程用 msgrcv读取。

          这里需要注意msgsnd可能会失败的两个情况:

          a) 阻塞方式下可能被信号打断(包括msgsnd和msgrcv), 此时会直接返回. 尤其是大流量应用中更容易出现.

                      安全的用法是判断操作是否被信号打断(errno为EINTR),如果被打断,则需要继续尝试。

          b) 消息队列满

                     产生这个错误,则需要考虑提高系统消息队列规格,或者查看消息接收处是否有问题

    4. msgctl函数可以用来删除消息队列

        消息队列产生之后,除非明确的删除(可以用),产生的队列会一直保留在系统中。linux下消息队列的个数是有限的,注意不要泄露。如果使用已经达到上限,msgget调用会失败,产生的错误码对应的提示信息为no space left on device.

    相关命令行接口:

    可以使用ipcs, 以及ipcrm命令进行验证,诊断。

    ipcs -q -l  列出当前系统消息队列规格配置

    ipcs -q     列出当前系统消息队列的简单使用情况

    ipcs -q -u 列出当前系统消息队列的详细使用情况

    ipcrm      可以手工删除某个消息队列


    原文地址:http://blog.csdn.net/houruizheng/article/details/5618363


  • 相关阅读:
    TLS回调函数
    MySQL-based databases CVE-2016-6664 本地提权
    go语文中panic的使用
    Redis实现分布式锁与任务队列的思路
    mysql添加权限权限用户
    php压缩html代码减少页面响应时间
    Docker搭建nginx+php-fpm运行环境
    vscode使用phpxdebug调试
    PHP7引用类型
    PHPFPM模式三种运行模式
  • 原文地址:https://www.cnblogs.com/java20130726/p/3218496.html
Copyright © 2020-2023  润新知