【专栏】数据结构和算法之美-队列:队列在线程池等有限资源池中的应用

本文主要是介绍【专栏】数据结构和算法之美-队列:队列在线程池等有限资源池中的应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

学习笔记

如何理解“队列”?

结构特征
  • 操作受限的线性表数据结构
  • 两端开放,一端是数据的入口,另一端是数据的出口
行为特征
  • 先进先出,类似于水管,从一端进水,另一端出水,先进去的水会先流出来

如何实现队列?

基于数组实现:顺序队列
/*Queue implement based on the array*/
/*Queue implement based on the linked list*/
/*Circl Queue implement based on the array*/#include <stdio.h>#define QUEUE_LEN 8
#define TRUE (unsigned short)1
#define FALSE (unsigned short)0typedef unsigned short bool;static int queueArray[QUEUE_LEN];bool inQueue(int data, int *phead, int *ptail)
{bool ret = FALSE;int currentIndex = *ptail;int n = 0;if(*ptail == QUEUE_LEN){/*it is full*/for(; n < ((*ptail) - (*phead)); n++){queueArray[n] = queueArray[(*phead) + n];}*phead = 0;if(n < QUEUE_LEN){queueArray[n] = data;*ptail = n + 1;ret = TRUE;}else{printf("error! queue is full\n");ret = FALSE;}}else{queueArray[currentIndex] = data;*ptail = currentIndex+1;ret = TRUE;}return (ret);}int outQueue(int *phead, int *ptail)
{int ret = 0;int currentIndex = *phead;if(*ptail == *phead){return -1;}else{ret = queueArray[currentIndex];*phead = currentIndex + 1;}return ret;
}void main(void)
{int tail = 0;int head = 0;int data = 1;int n = 0;for (; n < QUEUE_LEN; n++){inQueue(data, &head, &tail);data += 1;}printf("###########test 1: new data cann't enter while the queue is full: %d\n", inQueue(9,&head, &tail));printf("###########test 2: data leave from the queue: %d\n", outQueue(&head, &tail));printf("************head=%d, tail=%d, the latest leaving value is %d\n", head, tail, queueArray[head -1]);printf("***********test 3: new data can enter even though tail reaches the end of the queue\n");inQueue(10, &head, &tail);printf("************tail's position:%d, the latest entering value is %d\n", tail, queueArray[tail - 1]);
}

循环队列

结构特征
  • 首尾相连,成环形
  • 对于用数组实现的非循环队列,队满条件tail == n,队空条件head == tail。 而循环队列,队满特征是(tail+1)%n=head;
    -在这里插入图片描述
行为特征
  • 新元素添加进来后,如果达到队满条件,tail在环中后移一位,而不是直接加1
特殊特性的队列

阻塞队列特征

  • 队空时,从对头取数据会被阻塞
  • 队满时,插入数据操作会被阻塞
  • Linux环形缓存
  • 在这里插入图片描述
    阻塞队列是“生产者-消费者模型”的一种实现策略。
    而在多线程情况下,多个线程同时操作队列,如下,有多个线程同时从队头取数据,保证线程安全的队列我们就叫作并发队列,那么如何实现它呢?(看实战篇的Disruptor)
    在这里插入图片描述
    关于线程池会用到队列排队请求?

这篇关于【专栏】数据结构和算法之美-队列:队列在线程池等有限资源池中的应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/668701

相关文章

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比

《CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比》CSS中的position属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布... css 中的 position 属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布局和层叠关

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构