github源码指引:共享内存、数据结构与算法:基于共享内存的散列存储hash

本文主要是介绍github源码指引:共享内存、数据结构与算法:基于共享内存的散列存储hash,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

初级代码游戏的专栏介绍与文章目录-CSDN博客

我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。

这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。


        相关专题:共享内存、数据结构与算法_初级代码游戏的博客-CSDN博客

        相关文章:20、基于共享内存的散列存储hash-CSDN博客

        基础操作:github源码指引:共享内存、数据结构与算法-CSDN博客 

目录

一、运行示例

二、示例代码


一、运行示例

        在shmfc目录运行run.sh,显示命令表:

----------------------------------------
命令表:(q=exit)
0 管理
1 test_BinaryPool
3 test_CMultiProcessServer
4 test_CMultiProcessServer_view
5 test_CMultiProcessServer_speed
6 test_CMultiProcessServer_direct
7 test_RebuildSet
12 UDP测试客户端
13 UDP测试服务端
14 CStressTesting
15 CTestCSimpleMultiProcess_mutex atomic
16 CTest_hash
17 T_SHM_HASH
88 test_CMyRWMutex
89 test_T_SHM_SET_GROUP
90 test_shm_IActiveObject
91 test_ShmMultiMap
99 test_ParseFromXml
........................................
----------------------------------------
请选择命令:(q=exit default=17):

         输入17执行基于共享内存的hash的测试:

[08-26 08:39:22][应用][2516][信息] 用户输入的是:17
[08-26 08:39:22][2516-15][信息][shmArray.h              : 960(AttachToShm)][  0.59]test 连接共享内存成功 PI_N 1 PART 0 shmid = 622602 p 0x7f2cd2cf9000
[08-26 08:39:22][2516-16][信息][shmArray.h              : 960(AttachToShm)][  0.59]test_D 连接共享内存成功 PI_N 2 PART 0 shmid = 655371 p 0x7f2cd2cf4000
[08-26 08:39:22][应用][2516][信息][shmIActiveObject.h      :1059(RunCmdUI)][  0.59]
当前对象:test 子项[test test_D ]b:返回上一层 child:选择子项操作 默认显示子项列表和最后操作状态
1:创建 2:连接(只读) 3:连接(可写) 4:断开 5:禁用互斥 6:清除数据 7:创建私有 8:删除共享内存 9:显示 10:数据
11:从数据库加载 12:保存到数据库
21:从目录加载 22:保存到目录 23:导出为文本文件
31:从目录加载到私有内存 32:销毁私有内存
97:repair 98:check 99:ToDo 100:shell(q=exit ):

        输入b继续运行程序:

[08-26 08:39:54][应用][2516][信息][shmHash.h               :  91(ReportData)][  0.88]               65426 65526
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  87(ReportData)][  0.88]------------ 65527 65427
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  91(ReportData)][  0.88]               65427 65527
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  87(ReportData)][  0.88]------------ 65528 65428
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  91(ReportData)][  0.88]               65428 65528
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  87(ReportData)][  0.88]------------ 65529 65429
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  91(ReportData)][  0.88]               65429 65529
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  87(ReportData)][  0.88]------------ 65530 65430
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  91(ReportData)][  0.88]               65430 65530
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  87(ReportData)][  0.88]------------ 65531 65431
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  91(ReportData)][  0.88]               65431 65531
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  87(ReportData)][  0.88]------------ 65532 65432
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  91(ReportData)][  0.88]               65432 65532
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  87(ReportData)][  0.88]------------ 65533 65433
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  91(ReportData)][  0.88]               65433 65533
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  87(ReportData)][  0.88]------------ 65534 65434
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  91(ReportData)][  0.88]               65434 65534
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  87(ReportData)][  0.88]------------ 65535 65435
[08-26 08:39:54][应用][2516][信息][shmHash.h               :  91(ReportData)][  0.88]               65435 65535
[08-26 08:39:54][应用][2516][信息][shmIActiveObject.h      :1059(RunCmdUI)][  0.88]
当前对象:test 子项[test test_D ]b:返回上一层 child:选择子项操作 默认显示子项列表和最后操作状态
1:创建 2:连接(只读) 3:连接(可写) 4:断开 5:禁用互斥 6:清除数据 7:创建私有 8:删除共享内存 9:显示 10:数据
11:从数据库加载 12:保存到数据库
21:从目录加载 22:保存到目录 23:导出为文本文件
31:从目录加载到私有内存 32:销毁私有内存
97:repair 98:check 99:ToDo 100:shell(q=exit ):

        插入了很多数据,可以输入9查看一下:

[08-26 08:41:39][应用][2516][信息] 用户输入的是:9
[08-26 08:41:39][应用][2516][信息][shmArray.h              :1401(Report)][  1.18]
test 开始报告T_ARRAY......
pHead=0x7f2cd2cf9000 pData=0x7f2cd2cf9ad8 isPrivate=0 shmid=622602 sizeof(T)=8
GUID = 8AA20E2E-4891-4df1-A87E-E5A23CB8D076
sizeof short= 2 int= 4 long= 8    byteorder= 10 =   2776  1 =     24  2 =      8  3 =      0  4 =    998  5 =    9996 =   1000
name=test part=0 capacity=65536,size=65536(100.00%) bytes=527064
地址映射表: GET_PP_SET=(nil)
分块数 7
0 : shm_id=622602 handle[0,1024) 容量=1024 连接信息: shm_id=622602 addr=0x7f2cd2cf9ad8
1 : shm_id=753678 handle[1024,2048) 容量=1024 连接信息: shm_id=753678 addr=0x7f2cd2cf2000
2 : shm_id=819216 handle[2048,4096) 容量=2048 连接信息: shm_id=819216 addr=0x7f2cd2cee000
3 : shm_id=884754 handle[4096,8192) 容量=4096 连接信息: shm_id=884754 addr=0x7f2cd2ce6000
4 : shm_id=950292 handle[8192,16384) 容量=8192 连接信息: shm_id=950292 addr=0x7f2cd2cd6000
5 : shm_id=1015830 handle[16384,32768) 容量=16384 连接信息: shm_id=1015830 addr=0x7f2cd2cb6000
6 : shm_id=1081368 handle[32768,65536) 容量=32768 连接信息: shm_id=1081368 addr=0x7f2cd2c76000
--------------------------------------------
bucket_count 65536(32768 of 32768)
[08-26 08:41:39][应用][2516][信息][shmMultiList.h          : 282(Report)][  1.18]test_D 开始报告T_ARRAY......
pHead=0x7f2cd2cf4000 pData=0x7f2cd2cf4ad8 isPrivate=0 shmid=655371 sizeof(T)=16
GUID = 8AA20E2E-4891-4df1-A87E-E5A23CB8D076
sizeof short= 2 int= 4 long= 8    byteorder= 10 =   2776  1 =     24  2 =     16  3 =      0  4 =    998  5 =    9996 =   1000
name=test_D part=0 capacity=131072,size=100000(76.29%) bytes=2099928
地址映射表: GET_PP_SET=(nil)
分块数 8
0 : shm_id=655371 handle[0,1024) 容量=1024 连接信息: shm_id=655371 addr=0x7f2cd2cf4ad8
1 : shm_id=688140 handle[1024,2048) 容量=1024 连接信息: shm_id=688140 addr=0x7f2cd2c72000
2 : shm_id=720909 handle[2048,4096) 容量=2048 连接信息: shm_id=720909 addr=0x7f2cd2c6a000
3 : shm_id=786447 handle[4096,8192) 容量=4096 连接信息: shm_id=786447 addr=0x7f2cd2c5a000
4 : shm_id=851985 handle[8192,16384) 容量=8192 连接信息: shm_id=851985 addr=0x7f2cd2c3a000
5 : shm_id=917523 handle[16384,32768) 容量=16384 连接信息: shm_id=917523 addr=0x7f2cd068e000
6 : shm_id=983061 handle[32768,65536) 容量=32768 连接信息: shm_id=983061 addr=0x7f2cd060e000
7 : shm_id=1048599 handle[65536,131072) 容量=65536 连接信息: shm_id=1048599 addr=0x7f2cd050e000
--------------------------------------------
free_size=0 free_head=-1 0h  NEXT |      N
----- ----- - ------0    -1 |    1001    -1 |    1012    -1 |    1023    -1 |    1034    -1 |    1045    -1 |    1056    -1 |    1067    -1 |    1078    -1 |    1089    -1 |    109...
99990 34454 | 100090
99991 34455 | 100091
99992 34456 | 100092
99993 34457 | 100093
99994 34458 | 100094
99995 34459 | 100095
99996 34460 | 100096
99997 34461 | 100097
99998 34462 | 100098
99999 34463 | 100099
----- ----- - ------

        输入b继续运行程序:

[08-26 08:40:31][应用][2516][信息] 用户输入的是:b
[08-26 08:40:31][应用][2516][信息][shmfc_t.cpp             : 945(main)][  0.88]命令 17 返回 0

二、示例代码

        示例代码很简单:

		static int T_SHM_HASH_test(int argc, char** argv, char const* name, int version){G_IS_DEBUG = false;try{T_SHM_HASH<T_DATA, PI_HASH, PI_DATA> a(name, version);if (a.Attach(false) || (a.CreateShm() && a.Attach(false) && a.m_mutex.Reset())){a.RunCmdUI();a.clear();long count = 100000;CDemoData data;CDemoData* data_from_shm;for (int i = 0; i < count; ++i){DEBUG_LOG << i << endi;data.n = i + 100;if (!a.AddData(data, data_from_shm))return __LINE__;}for (int i = 0; i < count; ++i){data.n = i + 100;if (!a.GetData(data, data_from_shm))return __LINE__;}a.ReportData();a.Extend();a.ReportData();a.RunCmdUI();a.Detach();//a.DestoryShm();return 0;}else{return __LINE__;}}catch (char const* e){thelog << e << ende;abort();}}

        实际功能代码shmHash.h。


(这里是文档结束)

这篇关于github源码指引:共享内存、数据结构与算法:基于共享内存的散列存储hash的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

Redis存储的列表分页和检索的实现方法

《Redis存储的列表分页和检索的实现方法》在Redis中,列表(List)是一种有序的数据结构,通常用于存储一系列元素,由于列表是有序的,可以通过索引来访问元素,因此可以很方便地实现分页和检索功能,... 目录一、Redis 列表的基本操作二、分页实现三、检索实现3.1 方法 1:客户端过滤3.2 方法

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

使用JavaScript操作本地存储

《使用JavaScript操作本地存储》这篇文章主要为大家详细介绍了JavaScript中操作本地存储的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录本地存储:localStorage 和 sessionStorage基本使用方法1. localStorage

Redis的Hash类型及相关命令小结

《Redis的Hash类型及相关命令小结》edisHash是一种数据结构,用于存储字段和值的映射关系,本文就来介绍一下Redis的Hash类型及相关命令小结,具有一定的参考价值,感兴趣的可以了解一下... 目录HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSET

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系