超高速多进程操作key为uint32 value为uint32的数据(用于监控系统)
https://www.cnblogs.com/dearplain/
1.初始化,在共享内存上生成40个1000数组,数组每个项8个字节,4字节是key,4字节是value。40个数组有不同的少于1000的素数hash key。
2.从40个数组找到节点,index为hkey=key%hash,如果存在,则更新,如果不存在,增加节点后更新。
3.compare and swap 支持set操作。(如果失败就重新走流程)
4.atomic add支持原子增减。
5.compare and swap 支持增加节点操作。(如果失败就重新走流程)
6.如果40个数组都找不到,也没有空闲节点,则失败。
7.收集,agent会几秒内收集所有的数据,并全部置零。根据下面的计算,支持在同一机器几秒内同时使用37000个key,能满足大部分需求。
a = [0] * 40000 for i in range(1, 1000000): done = 0 j = 0 for h in [998, 997, 991, 983, 982, 977, 976, 974, 971, 967, 964, 958, 956, 953, 947, 944, 941, 937, 934, 932, 929, 926, 922, 919, 916, 914, 911, 908, 907, 904, 898, 892, 887, 886, 883, 881, 878, 877, 872, 866]: j = j+1 if a[i%h+(j-1)*1000] == 0: a[i%h+(j-1)*1000] = 1 done = 1 break if done == 0: print('error in:', i) break