消息队列

简介:

        之前在设计消息队列的时候,用的双缓冲,保持一个读线程,一个写线程!! 读线程对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的问题上面还有很多犹豫!


相关文章
|
Linux API
嵌入式Linux中的 gpio、gpiod基本分析
嵌入式Linux中的 gpio、gpiod基本分析
1820 0
|
JavaScript
js: 获取标签元素data-*属性值的方法
js: 获取标签元素data-*属性值的方法
662 0
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
AI内容创作Agent架构解析:基于移动端原生框架的内容特工队AI (ReelsAgent)与传统短视频工具的技术差异
传统的AI视频工具链往往基于单点功能堆栈或PC/Web端的SaaS架构,难以承载短视频营销所需的高频、高并发、全流程自动化需求。本文将从AI Agent系统架构角度,对比内容特工队AI (ReelsAgent)的移动端原生设计与现有主流工具的实现路径,以评估其在工程实践中的优劣。
977 7
|
网络安全
Xshell7连接Debian12系统,中文显示乱码,解决办法一览!
在使用Xshell 7连接Debian 12时,中文乱码通常由字符编码或字体设置不当引起。解决方法包括:1) 设置Xshell编码为UTF-8;2) 配置支持中文字体(如Microsoft YaHei);3) 调整Debian 12的Locale配置,确保支持zh_CN.UTF-8;4) 检查SSH服务端配置。完成设置后,重新连接并验证中文显示是否正常。注意字体优先级及系统兼容性,必要时调整环境变量或权限设置。
1151 3
|
缓存 开发工具 开发者
鸿蒙NEXT开发App相关工具类(ArkTs)
这段代码展示了一个名为鸿蒙NEXT开发 `AppUtil` 的工具类,主要用于管理鸿蒙应用的上下文、窗口、状态栏、导航栏等配置。它提供了多种功能,例如设置灰阶模式、颜色模式、字体类型、屏幕亮度、窗口属性等,并支持获取应用包信息(如版本号、包名等)。该工具类需在 UIAbility 的 `onWindowStageCreate` 方法中初始化,以便缓存全局变量。代码由鸿蒙布道师编写,适用于鸿蒙系统应用开发,帮助开发者更便捷地管理和配置应用界面及系统属性。
511 0
鸿蒙NEXT开发App相关工具类(ArkTs)
|
Ubuntu
vscode配置clang-format自动格式化代码
vscode配置clang-format自动格式化代码
4430 0
|
JavaScript 数据管理 编译器
揭秘 ArkTS 与 TypeScript 的神秘差异:鸿蒙系统开发者的必备知识与实战技巧
【10月更文挑战第18天】ArkTS 是华为为鸿蒙系统(HarmonyOS)推出的开发语言,作为 TypeScript 的超集,它针对鸿蒙系统的分布式特性和需求进行了优化和扩展。ArkTS 强化了分布式数据管理、类型系统、编译与运行时性能,并支持声明式 UI 和专为鸿蒙设计的 API,使开发者能够更高效地开发跨设备协同工作的应用。
1356 6
|
Linux C语言 C++
vsCode远程执行c和c++代码并操控linux服务器完整教程
这篇文章提供了一个完整的教程,介绍如何在Visual Studio Code中配置和使用插件来远程执行C和C++代码,并操控Linux服务器,包括安装VSCode、安装插件、配置插件、配置编译工具、升级glibc和编写代码进行调试的步骤。
4503 0
vsCode远程执行c和c++代码并操控linux服务器完整教程
|
存储 监控 网络协议
在Linux中,如何配置iSCSI目标?
在Linux中,如何配置iSCSI目标?
|
存储 Linux 开发工具
简述利用samba实现windows和linux之间文件同步
简述利用samba实现windows和linux之间文件同步
975 0