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

相关文章

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

在Ubuntu上打不开GitHub的完整解决方法

《在Ubuntu上打不开GitHub的完整解决方法》当你满心欢喜打开Ubuntu准备推送代码时,突然发现终端里的gitpush卡成狗,浏览器里的GitHub页面直接变成Whoathere!警告页面... 目录一、那些年我们遇到的"红色惊叹号"二、三大症状快速诊断症状1:浏览器直接无法访问症状2:终端操作异常

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

k8s搭建nfs共享存储实践

《k8s搭建nfs共享存储实践》本文介绍NFS服务端搭建与客户端配置,涵盖安装工具、目录设置及服务启动,随后讲解K8S中NFS动态存储部署,包括创建命名空间、ServiceAccount、RBAC权限... 目录1. NFS搭建1.1 部署NFS服务端1.1.1 下载nfs-utils和rpcbind1.1

Redis高性能Key-Value存储与缓存利器常见解决方案

《Redis高性能Key-Value存储与缓存利器常见解决方案》Redis是高性能内存Key-Value存储系统,支持丰富数据类型与持久化方案(RDB/AOF),本文给大家介绍Redis高性能Key-... 目录Redis:高性能Key-Value存储与缓存利器什么是Redis?为什么选择Redis?Red

java 恺撒加密/解密实现原理(附带源码)

《java恺撒加密/解密实现原理(附带源码)》本文介绍Java实现恺撒加密与解密,通过固定位移量对字母进行循环替换,保留大小写及非字母字符,由于其实现简单、易于理解,恺撒加密常被用作学习加密算法的入... 目录Java 恺撒加密/解密实现1. 项目背景与介绍2. 相关知识2.1 恺撒加密算法原理2.2 Ja

Nginx屏蔽服务器名称与版本信息方式(源码级修改)

《Nginx屏蔽服务器名称与版本信息方式(源码级修改)》本文详解如何通过源码修改Nginx1.25.4,移除Server响应头中的服务类型和版本信息,以增强安全性,需重新配置、编译、安装,升级时需重复... 目录一、背景与目的二、适用版本三、操作步骤修改源码文件四、后续操作提示五、注意事项六、总结一、背景与

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本