消息队列

简介:

        之前在设计消息队列的时候,用的双缓冲,保持一个读线程,一个写线程!! 读线程对read_list进行操作,写线程对write_list进行操作,保持一个队列的完整行就ok!

        比如如果想保持write_list一致,就是在插入操作的时候枷锁,在read_list为空的时候需要和write_list进行交换,也需要枷锁!!这样就保证了很少的线程冲突!!!当时的消息队列的双缓冲使用std::list进行设计!

        第二个版本的消息队列,进行了很大程度上的改进,使用了三个缓冲队列,一个读队列,一个写队列,一个缓冲队列,三个队列分别用数组形式体现,枷锁只要保证缓冲队列一致既可,即写队列向缓冲队列提交数据的时候,需要枷锁,读队列再向缓冲队列交换数据的时候,需要枷锁!想比较于上面的方法,枷锁次数明显减少,并且使用数组的形式,较std::list更为高效!这个消息队列在原公司的双缓冲队列的基础之上,进行设计!

        给出测试代码!和部分接口!


DuplexList _List;
 
 
void* producer(void* args)
{
    int i=0;
    while(1)
    {
        int* j = new int();
        *j = i;
        _List.append(j);
        usleep(0);
        i++;
        if(i % 100 == 0)
        {
            usleep(100);
        }
    }
    return (void*)0;
}
 
int main()
{
    pthread_t pid;
    pthread_create(&pid,NULL,producer,NULL);
 
    long long int start = get_os_system_time();
 
    int old=-1;
    while(true)
    {
        int* j = 0;
        _List.peek((void* &)j);
        if(j != 0)
        {
            usleep(0);
            if(*j != old + 1)
            {
                printf("error!\n");
            }
            old = *j;
            delete j;
        }
    }
    return 0;
}

    做了一下午的测试,没有问题,传递10w条消息大概使用20ms左右!这个性能可以了!

       之前在语言的选择上面做了很长时间的犹豫,一些java的朋友劝我说,一个消息队列的错误,那么整个游戏就会崩溃!劝我使用java的集成结构!! 不过最终我还是坚持了C++,底层代码使用C++,逻辑使用lua来编写!只是在AI的问题上面还有很多犹豫!


相关文章
|
人工智能 算法 Java
AI:互联网程序设计竞赛之蓝桥杯大赛的简介、奖项设置、大赛内容以及蓝桥杯与ACM(ICPC)的四个维度对比之详细攻略
AI:互联网程序设计竞赛之蓝桥杯大赛的简介、奖项设置、大赛内容以及蓝桥杯与ACM(ICPC)的四个维度对比之详细攻略
AI:互联网程序设计竞赛之蓝桥杯大赛的简介、奖项设置、大赛内容以及蓝桥杯与ACM(ICPC)的四个维度对比之详细攻略
|
Linux API
嵌入式Linux中的 gpio、gpiod基本分析
嵌入式Linux中的 gpio、gpiod基本分析
1296 0
|
Linux C语言 C++
vsCode远程执行c和c++代码并操控linux服务器完整教程
这篇文章提供了一个完整的教程,介绍如何在Visual Studio Code中配置和使用插件来远程执行C和C++代码,并操控Linux服务器,包括安装VSCode、安装插件、配置插件、配置编译工具、升级glibc和编写代码进行调试的步骤。
3258 0
vsCode远程执行c和c++代码并操控linux服务器完整教程
|
存储 数据库
飞腾uboot命令简单介绍
飞腾uboot命令简单介绍
1667 0
飞腾uboot命令简单介绍
|
IDE 编译器 Linux
用GCC开发STM32入门一(使用官方库)
用GCC开发STM32入门一(使用官方库)
|
Linux
device_node转换成platform_device
device_node转换成platform_device
433 0
|
Linux SoC
内核笔记](三)——Pinctrl介绍
内核笔记](三)——Pinctrl介绍
693 0
内核笔记](三)——Pinctrl介绍
|
Linux 程序员 API
Linux中设备树的分析与实现
Linux中设备树的分析与实现
878 1
Linux驱动中断与时间篇——高精度定时器hrtimer
Linux驱动中断与时间篇——高精度定时器hrtimer
|
NoSQL Linux 编译器
2023年最全VSCode远程Linux搭建C++工程开发利器
2023年最全VSCode远程Linux搭建C++工程开发利器
1121 0