level 5
西安恩仪联教育
楼主
一、什么是队列
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO)线性表
二、队列作用
队列通常用来起缓冲作用,两个异步执行的任务通常通过队列实现通信,起到协同工作的作用。消息队列是用来解决这样的问题的:将突发的大量请求转换为服务器能够处理的队列请求。例如:在一个秒杀活动中,服务器1秒可以处理100条请求。而在秒杀活动开启1秒进来1000个请求并且持续10秒。这个时候就需要将这10000个请求放入消息队列里面,后端按照原来的能力处理,用100秒将队列中的请求处理完毕。这样就不会宕机。
三、队列项目开发中使用
1、linux高级编程中利用消息队列实现进程间通信
概念:linux操作系统提供一个“消息队列”,用于进程通信之间。消息队列自带同步机制,数据入消息队列,如果队列满,则阻塞;从消息队列中获取数据,即出队时,队列是空的,则阻塞。
消息队列能够处理各种类型的数据,
数据类型由用户自行定义
struct msgbuf {
long mtype; /* 消息类型,必须 > 0 */
char mtext[100];
};
消息队列使用步骤:
创建消息队列
消息入队
消息出队
删除消息队列
该消息队列特点:
(1)自带同步机制
(2)用户使用之前根据提供的类型模式进行类型定义,根据需要修改第二项成员类型,确定具体操作的数据类型。
(3)其中mtype成员可以实现双向或者多向通信。
2、实时操作系统ucos中消息队列
消息队列就是通过 RTOS 内核提供的服务,任务或中断服务子程序可以将一个消息( 注意,uCOS-II 和 uCOS-III 是传递的是数据地址) 放入到队列。同样, 一个或者多个任务可以通过 RTOS 内核服务从队列中得到消息。通常, 先进入消息队列的消息先传给任务,也就是说,任务先得到的是最先进入到消息队列的消息,即先进先出的原则( FIFO)。
消息队列使用步骤:
创建消息队列
消息队列发送
消息队列接收
删除消息队列
消息队列清空
该消息队列特点:
(1)自带同步机制,消息队列为空时,出队阻塞,对满时,入队阻塞。
(2)队列中传输的是地址,不是数据,使用要注意。
(3)队列中数据是固定大小,创建队列时指定
(4)可以传输任意类型的数据
3、c++语言标准模板库STL中提供的queue
queue是一个类模版,通过传入不同类型的参数实现处理不同类型的数据,其实现由STL库提供,用户直接使用,不需要实现。通常用在多线程之间通信过程中,需要用户引入信号量或者条件变量来控制同步。提供的常用方法包括:入队:push(),出队 front()和pop(),判断队列是否为空的isemtpy(),获取队列大小的size()。
该消息队列特点:
(1)由STL库提供,用户直接使用。
(2)是类模版,数据类型虚拟化,可以传输任意类型的数据。
(3)用户需要提供同步机制
4、用户用c实现队列并使用
有些项目仅支持c语言,需要实现线程之间的通信,引入“生产者-消费者”模型,用户自己实现队列作为模型的缓冲区,实现先进和先出的效果。可以通过基于链表或者数组实现,处理的数据类型具体,无法做到通用的目的,针对每一个项目设计一个专用的队列。
本文由西安恩仪联教育科技有限公司整理和发布,欢迎大家转载和分享
2025年12月23日 09点12分
1
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO)线性表
二、队列作用
队列通常用来起缓冲作用,两个异步执行的任务通常通过队列实现通信,起到协同工作的作用。消息队列是用来解决这样的问题的:将突发的大量请求转换为服务器能够处理的队列请求。例如:在一个秒杀活动中,服务器1秒可以处理100条请求。而在秒杀活动开启1秒进来1000个请求并且持续10秒。这个时候就需要将这10000个请求放入消息队列里面,后端按照原来的能力处理,用100秒将队列中的请求处理完毕。这样就不会宕机。
三、队列项目开发中使用
1、linux高级编程中利用消息队列实现进程间通信
概念:linux操作系统提供一个“消息队列”,用于进程通信之间。消息队列自带同步机制,数据入消息队列,如果队列满,则阻塞;从消息队列中获取数据,即出队时,队列是空的,则阻塞。
消息队列能够处理各种类型的数据,
数据类型由用户自行定义
struct msgbuf {
long mtype; /* 消息类型,必须 > 0 */
char mtext[100];
};
消息队列使用步骤:
创建消息队列
消息入队
消息出队
删除消息队列
该消息队列特点:
(1)自带同步机制
(2)用户使用之前根据提供的类型模式进行类型定义,根据需要修改第二项成员类型,确定具体操作的数据类型。
(3)其中mtype成员可以实现双向或者多向通信。
2、实时操作系统ucos中消息队列
消息队列就是通过 RTOS 内核提供的服务,任务或中断服务子程序可以将一个消息( 注意,uCOS-II 和 uCOS-III 是传递的是数据地址) 放入到队列。同样, 一个或者多个任务可以通过 RTOS 内核服务从队列中得到消息。通常, 先进入消息队列的消息先传给任务,也就是说,任务先得到的是最先进入到消息队列的消息,即先进先出的原则( FIFO)。
消息队列使用步骤:
创建消息队列
消息队列发送
消息队列接收
删除消息队列
消息队列清空
该消息队列特点:
(1)自带同步机制,消息队列为空时,出队阻塞,对满时,入队阻塞。
(2)队列中传输的是地址,不是数据,使用要注意。
(3)队列中数据是固定大小,创建队列时指定
(4)可以传输任意类型的数据
3、c++语言标准模板库STL中提供的queue
queue是一个类模版,通过传入不同类型的参数实现处理不同类型的数据,其实现由STL库提供,用户直接使用,不需要实现。通常用在多线程之间通信过程中,需要用户引入信号量或者条件变量来控制同步。提供的常用方法包括:入队:push(),出队 front()和pop(),判断队列是否为空的isemtpy(),获取队列大小的size()。
该消息队列特点:
(1)由STL库提供,用户直接使用。
(2)是类模版,数据类型虚拟化,可以传输任意类型的数据。
(3)用户需要提供同步机制
4、用户用c实现队列并使用
有些项目仅支持c语言,需要实现线程之间的通信,引入“生产者-消费者”模型,用户自己实现队列作为模型的缓冲区,实现先进和先出的效果。可以通过基于链表或者数组实现,处理的数据类型具体,无法做到通用的目的,针对每一个项目设计一个专用的队列。
本文由西安恩仪联教育科技有限公司整理和发布,欢迎大家转载和分享