首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux内核编程--消息队列

一,关于Linux中的IPC IPC的意思是“ 进程间通信机制”,Linux内核有三种常用IPC对象可以拿来做进程间通信--消息队列,共享内存,信号量。...这三种IPC对象在Linux内核中都以链表的形式存储,它们都有特定的ID来标识(消息队列标识符msqid、共享内存标识符shmid,信号量标识符semid)。...但是在多核系统上,为了避免产生高速缓存一致性问题,更推荐使用消息队列消息队列特点: (1)消息队列可认为是全局的一个链表,由消息队列标识符进行标识。...(2)消息队列允许一个或多个进程写入或读取消息。 (3)消息队列的声明周期随内核。 (4)消息队列可以实现双向通信。...参考教程: 《UNIX环境高级编程第3版》 https://programs.team/linux-message-queue-programming.html https://www.tutorialspoint.com

4.5K20

Linux消息队列

什么是消息队列 消息队列可以分为队列消息 队列 队列是从开始到结束,有序的排放消息消息队列是用来在应用程序发送消息队列中存放了一些待处理的消息。...消息队列的基本结构是简单的,有一个客户端应用程序称为生产者,创建消息,并将它们传送到消息队列。其他应用程序,称为消费者,连接到队列,并得到要处理的消息。...消息队列API 创建新消息队列或取得已存在消息队列 #include ------------------------------------ int msgget(key_t...格式如下:msgsz消息的大小msgflgIPC_NOWAIT: 如果消息队列中没有数据,则立刻返回不用等待。MSG_NOERROR:如果消息队列长度大于msgsz,截断消息。...IPC_SET该命令用来设置消息队列的属性,要设置的属性存储在buf中。IPC_RMID从内核中删除 msqid 标识的消息队列

4.2K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux系统编程-进程间通信(消息队列)

    前面文章介绍了Linux下进程的创建,管理,陆续介绍了进程间通信的方式:管道、内存映射、共享内存等。这篇文章继续介绍Linux的进程间通信方式消息队列。 1....消息队列介绍 消息队列通过名字字面意思理解就是队列排队-和平常超市买东西排队付款一样结构,消息队列与FIFO很相似,都是一个队列结构,都可以有多个进程往队列里面写信息,多个进程从队列中读取信息。...而消息队列可以事先往队列中写信息,需要时再打开读取信息。 注意事项: 消息队列属于顺序队列形式的结构,向队列里写的每一条消息,会追加到队列后面,读取一个就从队列里消除一个。...msgget要么返回新创建的消息队列id,要么返回具有相同key值的消息队列id;如果IPC_EXCL和IPC_CREAT同时指明,则要么创建新的消息队列,要么当队列存在时,调用失败并返回-1。...标志 ENOENT:key指定的消息队列不存在同时msgflg中不指定IPC_CREAT标志 ENOMEM:需要建立消息队列,但内存不足 ENOSPC:需要建立消息队列,但已达到系统的最大消息队列容量

    1.8K40

    Linux系统编程——进程间通信:消息队列

    概述 消息队列提供了一种在两个不相关的进程之间传递数据的简单高效的方法,其特点如下: 消息队列可以实现消息的随机查询。消息不一定要以先进先出的次序读取,编程时可以按消息的类型读取。...消息队列允许一个或多个进程向它写入或者读取消息。 与无名管道、命名管道一样,从消息队列中读出消息消息队列中对应的数据都会被删除。...每个消息队列都有消息队列标识符,消息队列的标识符在整个系统中是唯一的。 消息队列消息的链表,存放在内存中,由内核维护。只有内核重启或人工删除消息队列时,该消息队列才会被删除。...若不人工删除消息队列消息队列会一直存在于系统中。...*buf) 功能: 对消息队列进行各种控制,如修改消息队列的属性,或删除消息消息队列

    1.4K10

    linux网络编程之POSIX 消息队列 和 系列函数

    一、在前面介绍了system v 消息队列的相关知识,现在来稍微看看posix 消息队列。...posix消息队列的一个可能实现如下图: 其实消息队列就是一个可以让进程间交换数据的场所,而两个标准的消息队列最大的不同可能只是api 函数的不同,如system v 的系列函数是msgxxx,而posix...posix 消息队列也有一些对消息长度等的限制,man 7 mq_overview: simba@ubuntu:~/Documents/code/linux_programming/UNP/posix$.../proc/sys/fs/mqueue/queues_max  256 即一个消息队列最多能有10条消息,每条消息的最大长度为8192字节,一个系统最多能有256个消息队列。...还有一点是,在Linux上,posix 消息队列是以虚拟文件系统实现的,必须将其挂载到某个目录才能看见,如            # mkdir /dev/mqueue            #

    2.3K01

    linux网络编程之System V 消息队列(一):消息队列内核结构和msgget、msgctl 函数

    一、消息队列 1、消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法 2、每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值 3、消息队列与管道不同的是,消息队列是基于消息的...4、消息队列也有管道一样的不足,就是每个消息的最大长度是有上限的(MSGMAX),每个消息队列的总的字节数是有上限的(MSGMNB),系统上消息队列的总数也有一个上限(MSGMNI),这三个参数都可以查看...四、消息队列在内核中的表示 ?...消息队列是用链表实现的,这里需要提出的是MSGMAX指的是一条消息的纯数据大小的上限,上图是一个消息队列,则其纯数据总和不能超过MSGMNB,像这样一条消息队列,系统含有的总数不能超过MSGMNI 个。...消息队列,但他们的标识码msqid是不一样的,且指定IPC_PRIVATE 产生的是私有的消息队列

    1.9K11

    Linux消息队列及函数

    消息队列的概念 消息队列就是一个消息的链表,每个消息队列都有一个队列头,用结构struct msg_queue来描述。...<0 接收消息队列中类型值小于type的绝对值的所有消息中类型值最小的那一条消息 消息队列属性设置 消息队列的信息基本都保存在消息队列头中,可分配一个类似于消息队列头的结构struct msqid_ds...,要设置的属性存储在**参数buf**中 PC_RMID:删除msqid标识的消息队列 编程示例 消息队列编程步骤: 使用ftok()生成key 使用msgget()创建/获取消息队列,返回值为队列标识符.../msg2_rcv key = 0x651102ed Message:hello2, Type:2 Message:hello1, Type:1 示例3 消息队列的综合编程使用举例,msg_app.c:...参考: 《精通Linux C编程》- 程国钢 《Linux C编程完全解密》- 闫敬 吴淑坤

    4.7K20

    PHP高级编程消息队列

    PHP高级编程消息队列 摘要 2015-10-19 第一版 2016-11-31 第二版 目录 1. 什么是消息队列 2. 为什么使用消息队列 3. 什么场合使用消息队列 4....什么时候使用消息队列 5. 谁负责处理消息队列 6. 怎么实现消息队列框架 6.1. 守护进程 6.2. 消息队列协议 6.3. 消息队列处理 6.4. 测试 7. 多线程 8....什么是消息队列 消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线程间的通信方式 2. 为什么使用消息队列 消息队列技术是分布式应用间交换信息的一种技术。...消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读出。通过消息队列,应用程序可独立地执行,它们不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收此消息。 3....https://github.com/netkiller/SOA/blob/master/bin/rabbitmq.php 每个实例处理一组队列实例化需要提供三个参数,$queueName = '队列

    1.4K40

    php使用redis实现消息队列实例

    项目中使用消息队列的地方很多,一般小型项目我们想用用队列,就不需要搭建专门的队列服务器了,我们直接使用redis即可,基本能实现我们的需求。...项目中使用消息队列的地方 1、缓解服务器压力,将请求换成异步。...2、日志收集 3、文章列表(不同地方的文章,排序分页使用,这个就不需要消费了) 4、秒杀 等等,都可以使用消息队列 消息队列实现的步骤 1)redis函数rpush,lpop 2)建议定时任务入队列 3...)创建定时任务出队列队列 demo.php <?...可以使用命令查看队列里数据的情况 lrange mylist 0 -1 通过这个命令我们可以做一个可视化的,展示前三百队列的情况,做到实时观察队列数据,如下图所示。

    90620

    PHP使用topthinkthink-queue消息队列实例

    --daemon --queue createAdminLogQueue 队列添加php代码快 // 当前队列归属的队列名称 $jobHandlerClassName =...$data, []); } 复制代码 使用tp5勾子实现think-queue消息队列实例,实现后台操作日志到添加到数据库 前提:thinkphp5框架基础上,已包含topthink/think-queue...消息队列依赖包,可以用composer下载,这里不懂可以百度,就不说你。...; } /** * fire是消息队列默认调用的方法 * @param Job $job 当前的任务对象 * @param array|mixed $data...queue:work --queue createAdminLogQueue 复制代码 thinkqueue 后台运行常驻程序 一 进入项目路径,在目录下执行命令 在后台运行两条进程,常驻内存,不断的处理任务消息队列任务

    1.1K10

    Linux进程间通信 消息队列

    消息队列消息的链接表,存储内核中,由消息标识符标识。 --《UNIX环境高级编程》 简单理解,消息队列就是一堆消息的有序集合,并缓存于内核中。...实例演示 功能: 用消息队列实现server接client的数据,server可筛选显示指定消息类型的数据。 效果:server接收所有消息: ? server 筛选消息类型为2的数据: ?...总结 消息队列在进程间通信的优势总结起来有以下几点: 缓存:数据较大的消息处理起来时间较长,此时将其写入消息队列更快,待系统空闲时再处理。提高系统任务执行效率。...送达:消息队列存储的消息,会一直保留在队列中直到消息被处理,且被取走后就会被队列释放。因此无论多少个进程在获取,每个消息仅会被处理一次。 排序:消息队列中一直按照“先入先出”的顺序来执行。...异步:消息队列因为会缓存消息,且顺序处理不会丢失。因此多个进程可通过消息队列实现异步通信,互不阻塞。

    4.6K40

    Linux进程通信之消息队列

    Linux进程通信之IPC消息队列 首先消息队列是存放消息队列,而队列则是一种先进先出的数据结构。...、msg_stat_queue 具体的相关参数以及介绍,请查看PHP手册及相关文档 PHP手册之IPC 不同进程间消息队列通信 写进程demo21.php //根据一个存在的文件和标识生成消息队列的key...$key = ftok('demo21.php','a'); //创建消息队列 $msgId = msg_get_queue($key); //向消息队列中发送消息 msg_send($msgId...key $key = ftok('demo21.php','a'); //创建消息队列 $msgId = msg_get_queue($key); //接收消息队列消息 msg_receive($msgId...父子进程消息队列通信 假设是子进程接收,父进程发送 $key = ftok('demo23.php','a'); //获取消息队列 $msgId = msg_get_queue($key);

    2.7K20

    Linux 的进程间通信:消息队列

    前言 Linux系统给我们提供了一种可以发送格式化数据流的通信手段,这就是消息队列。...而内核给我们提供的消息队列,无疑大大方便了我们的工作。 Linux环境提供了XSI和POSIX两套消息队列,本文将帮助您掌握以下内容: 如何使用XSI消息队列。 如何使用POSIX消息队列。...使用msgctl删除消息队列的方法比较简单,不在复述。另外关于msgctl的其他使用,请大家参考msgctl的手册。这部分内容的另外一个权威参考资料就是《UNIX环境高级编程》。...这套消息队列Linux 2.6.6版本之后开始支持,还需要你的glibc版本必须高于2.3.4。...在Linux上,这个值为32768。默认情况下,消息队列会先按照优先级进行排序,就是msg_prio这个值越大的越先出队列。同一个优先级的消息按照fifo原则处理。

    13.5K01

    linux网络编程之System V 消息队列(二):消息队列实现回射客户服务器和 msgsnd、msgrcv 函数

    msgp:是一个指针,指针指向准备发送的消息结构体 msgsz:是msgp指向的消息长度,这个长度不含保存消息类型的那个long int长整型 msgflg:控制着当前消息队列满或到达系统上限时将要发生的事情...msgid: 由msgget函数返回的消息队列标识码 msgp:是一个指针,指针指向准备接收的消息结构体 msgsz:是msgp指向的最大消息长度,这个长度不含保存消息类型的那个long int...=0返回队列第一条信息 msgtype>0返回队列第一条类型等于msgtype的消息  msgtype<0返回队列第一条类型小于等于msgtype绝对值的消息,并且是满足条件的消息类型最小的消息...二、消息队列实现回射客户/服务器 在前面的系列文章中,我们都是使用socket 套接字来实现回射客户/服务器程序,现在尝试使用消息队列来实现,主要就是利用上面介绍的两个函数msgsnd,msgrcv 。...即某个客户端先创建一个私有消息队列,然后将私有消息队列标识符和具体数据发到共享的队列,服务器fork 出一个子进程,此时根据私有队列标识符就可以将数据回射到这个队列,这个客户端就可以从私有队列读取到回射的数据

    1.6K00

    Linux进程间通信——消息队列(一)

    今天就聊一聊Linux系统进程之间的通信。...标识符和Key 每个内核中的IPC结构(消息队列、信号量、共享内存)都用一个非负整数的标识符来进行调用。如,当使用消息队列发送或接收消息队列时,需要知道队列标识符。...②如果希望新建一个消息队列,而且要确保不是引用具有同一标识符的现有的消息队列,需在flag中指定IPC_CREAT和IPC_EXCL。这样,如果消息队列已经存在则返回值会报错。 3....例如:如果进程创建 了一个消息队列,并在队列中放入了几条消息,然后进程终止,但是该消息队列及其内容并不会被删除。...③下次具体介绍api时还有其他精彩的用法 参考书籍 《UNIX环境高级编程第三版》 阅读一手资料,多思考,还是挺好的。

    3K20

    Linux进程间通信(二) - 消息队列

    消息队列 消息队列Linux IPC中很常用的一种通信方式,它通常用来在不同进程间发送特定格式的消息数据。...消息队列是随内核的持续性,即一个进程向消息队列写入消息后,然后终止,另外一个进程可以在以后某个时刻打开该队列读取消息。只要内核没有重新自举,消息队列没有被删除。...消息队列中的每条消息通常具有以下属性: Ø 一个表示优先级的整数; Ø 消息的数据部分的长度; Ø 消息数据本身; 下面我们分别阐述POSIX消息队列和System V消息队列,这2种消息队列目前Linux...在Linux 2.6中该类型的定义为整型: #include typedef int mqd_t; // 关闭消息队列 mqd_t mq_close(mqd_t mqdes...下面是在Linux 2.6下shell对启动进程的POSIX消息队列大小的限制: [root@rocket ipc]# ulimit -a|grep message POSIX message queues

    6.2K90

    Linux进程间通信之消息队列

    一,消息队列 1,概念:“消息队列”是在消息的传输过程中保存消息的容器 2,消息队列就是一个消息的链表。可以把消息看作一个记录,具有特定的格式以及特定的优先级。   ...对消息队列有写权限的进程可以向消息队列中按照一定的规则添加新消息;   对消息队列有读权限的进程则可以从消息队列中读走消息。   消息队列是随内核持续的。...3,编程注意事项:使用时先把数据封装成消息,把消息存入队列 编程步骤: 具体函数的用法可以用man手册查看(强力推荐) (1)ftok()生产key (2)使用msgget( ) 创建/获取消息队列,返回值是队列标识符...(3)使用msgsnd( ) 发送消息     使用msgrcv( ) 接收消息 (4)使用msgctl( ) 删除消息队列 4,实例: sendmsg.c   用来发送消息的 // sendmsg.c...0); printf("类型:%d, 内容:%s\n", msg.mtype, msg.buf); printf("消息接收完成,按回车销毁消息队列\n");

    2.9K90

    消息队列(一) MySQL实现消息队列

    消息队列(一)MySQL实现消息队列 (原创内容,转载请注明来源,谢谢) 一、概述 消息队列(MessageQueue,通常简称MQ)是一种进程间通信或同一进程的不同线程间的通信方式,是分布式应用间交换信息的一种技术...通过消息队列,应用程序可独立地执行,它们不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收此消息。...消息队列有多种实现方式,可以用关系型数据库(如Mysql)、Nosql(如redis)、现有框架(如rabbitMQ)等。...Mysql处理消息队列的场景:主要是在数据处理量大、耗时久、处理流程繁杂、处理内容多、需要持久化(入库)、业务处理要求相对不实时的场景,如发邮件、发短信、订单后续处理、操作数据记录日志等。...因此,此场景就非常适合于用Mysql解决此消息队列

    14.9K41

    消息队列及常见消息队列介绍

    二、消息队列使用场景 消息队列在实际应用中包括如下四个场景: 应用耦合:多应用间通过消息队列对同一消息进行处理,避免调用接口失败导致整个过程失败; 异步处理:多应用对消息队列中同一消息进行处理,应用间并发处理消息...而加入消息队列后,系统可以从消息队列中取数据,相当于消息队列做了一次缓冲。...; 队列高可用:队列可以在集群中的机器上进行镜像,以确保在硬件问题下还保证消息安全; 多种协议的支持:支持多种消息队列协议; 服务器端用Erlang语言编写,支持只要是你能想到的所有编程语言; 管理界面...来从多方面进行扩展,也可以编写自己的插件; 使用RabbitMQ需要: ErLang语言包 RabbitMQ安装包 RabbitMQ可以运行在Erlang语言所支持的平台之上: Solaris BSD Linux...,Consumer如果做广播消费,则一个consumer实例消费这个Topic对应的所有队列,如果做集群消费,则多个Consumer实例平均消费这个topic对应的队列集合; 能够保证严格的消息顺序;

    50.3K2714

    消息队列-腾讯云消息队列 CKafka

    腾讯云消息队列 CKafka,分布式、高吞吐量、高可扩展性的消息服务,100%兼容开源 Apache Kafka 0.9 0.10 腾讯云消息队列 CKafka点击查看详情 消息队列 CKafka 简介...消息队列 CKafka(Cloud Kafka)是一个分布式、高吞吐量、高可扩展性的消息系统,100%兼容开源 Kafka API(0.9、0.10版本)。...高可靠 消息队列 CKafka 集群性能强劲,生产性超越开源方案;此外,消息队列 CKafka 分布式的部署,集群稳定性也有很好的保障。...高扩展性 支持集群水平扩容,实例无缝升配,底层系统根据业务规模自动弹性伸缩,上层业务无感知。...业务安全 不同租户间网络隔离,实例的网络访问在账户间天然隔离;支持管理流的 CAM 鉴权及数据流的 SASL 权限控制,严格控制访问权限。

    6K60
    领券