From 2561a007b8d8999a4750046d0cfb3b1ad5af50ac Mon Sep 17 00:00:00 2001 From: zhangmeng <775834166@qq.com> Date: 星期二, 09 四月 2024 15:29:32 +0800 Subject: [PATCH] test for perf --- src/shm/shm_mm_wrapper.cpp | 89 ++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 85 insertions(+), 4 deletions(-) diff --git a/src/shm/shm_mm_wrapper.cpp b/src/shm/shm_mm_wrapper.cpp index 6175923..672fadb 100644 --- a/src/shm/shm_mm_wrapper.cpp +++ b/src/shm/shm_mm_wrapper.cpp @@ -1,15 +1,96 @@ -#include "shm_mm_wraper.h" -#include "mem_pool.h" +#include "shm_mm_wrapper.h" +#include "shm_mm.h" #include "hashtable.h" +#include "lock_free_queue.h" +#include "shm_socket.h" + +#define BUFFER_TIME 1 + void shm_mm_wrapper_init(int size) { - mem_pool_init(size); + shm_mm_init(size); + } void shm_mm_wrapper_destroy() { - mem_pool_destroy(); + shm_mm_destroy(); } int shm_mm_wrapper_alloc_key() { return mm_alloc_key(); } + + +/** + * 鍥炴敹鍋囧垹闄ょ殑key + */ +int shm_mm_wrapper_start_resycle() { + ShmQueueStMap * shmQueueStMap = shm_mm_attach<ShmQueueStMap>(SHM_QUEUE_ST_KEY); + hashtable_t *hashtable = mm_get_hashtable(); + LockFreeQueue<shm_packet_t> *mqueue; + while(true) { + for(auto it = shmQueueStMap->begin(); it != shmQueueStMap->end(); ++it ) { + if(it->second.status == SHM_QUEUE_ST_CLOSED && difftime(time(NULL), it->second.closeTime) > BUFFER_TIME ) { + // mqueue = (LockFreeQueue<shm_packet_t> *)hashtable_get(hashtable, keys[i]); + // if(mqueue != NULL) { + // delete mqueue; + // } + + hashtable_remove(hashtable, it->first); + printf("reomved queue %d\n\n", it->first); + it->second.status = SHM_QUEUE_ST_RECYCLED; + // 涓嶈兘 erase ,鍚﹀垯浼氬嚭鐜板杩涚▼涔嬮棿鐨勫悓姝ラ棶棰橈紝 鑰岃繖姝f槸杩欓噷瑕佽В鍐崇殑闂 + // it = shmQueueStMap->erase(it); + // continue; + } + } + + sleep(1); + } + return 0; +} + +//鍒犻櫎鍖呭惈鍦╧eys鍐呯殑queue +int shm_mm_wrapper_remove_keys(int keys[], int length) { + hashtable_t *hashtable = mm_get_hashtable(); + LockFreeQueue<shm_packet_t> *mqueue; + int count = 0; + for(int i = 0; i< length; i++) { + // 閿�姣佸叡浜唴瀛樼殑queue + hashtable_remove(hashtable, keys[i]); + LoggerFactory::getLogger()->debug("remove queue %d", keys[i]); + count++; + + } + return count; +} + + +// 鍒犻櫎涓嶅湪keys鍐呯殑queue +int shm_mm_wrapper_remove_keys_exclude(int keys[], int length) { + hashtable_t *hashtable = mm_get_hashtable(); + std::set<int> *keyset = hashtable_keyset(hashtable); + std::set<int>::iterator keyItr; + LockFreeQueue<shm_packet_t> *mqueue; + bool found; + int count = 0; + for (keyItr = keyset->begin(); keyItr != keyset->end(); keyItr++) { + found = false; + for (size_t i = 0; i < length; i++) { + if (*keyItr == keys[i]) { + found = true; + break; + } + } + // 100鍐呯殑鏄痓us鍐呴儴鑷繁鐢ㄧ殑 + if (!found && *keyItr > 100) { + // 閿�姣佸叡浜唴瀛樼殑queue + hashtable_remove(hashtable, *keyItr); + LoggerFactory::getLogger()->debug("remove queue %d", *keyItr); + count++; + + } + } + delete keyset; + return count; +} -- Gitblit v1.8.0