优化共享内存解析格式,减少内存浪费。优化生产者进程的效率。
This commit is contained in:
@@ -233,19 +233,27 @@ int check_reopen_log_file(struct log_file_list *node)
|
||||
}
|
||||
return CONSUMER_SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
(int)file_len + (str)file + '\0' + (int)payload_len + (str)payload + '\0'
|
||||
*/
|
||||
void consumer_ring_queue_to_file(struct MESA_shm_queue_head *head)
|
||||
{
|
||||
int *p_file_len = NULL;
|
||||
int file_len = 0;
|
||||
char *p_file = NULL;
|
||||
int *p_payload_len = NULL;
|
||||
char *payload = NULL;
|
||||
int payload_len = 0;
|
||||
char buf[MESA_SHM_LOG_BUF_PREFIX_LEN + MESA_SHM_RING_QUEUE_BLOCK_BUFLEN] = {0};
|
||||
char *payload = NULL;
|
||||
char buf[MESA_SHM_LOG_BUF_PREFIX_LEN + MESA_SHM_RING_QUEUE_BLOCK_SIZE] = {0};
|
||||
int n = 0;
|
||||
char strtime[DEFAUT_BUF_SIZE] = {0};
|
||||
struct log_file_list *node = NULL;
|
||||
get_cur_strftime(strtime, sizeof(strtime));
|
||||
while(!MESA_shm_ring_queue_is_empty(head)){
|
||||
p_file = (char *)(head + 1) + (head->blksize * head->rd_idx);
|
||||
p_file_len = (int *)((char *)(head + 1) + (head->blksize * head->rd_idx));
|
||||
file_len = *p_file_len;
|
||||
p_file = (char *)(p_file_len + 1);
|
||||
node = get_log_file_node(p_file);
|
||||
if(node == NULL){
|
||||
node = create_log_file_node(p_file);
|
||||
@@ -259,7 +267,7 @@ void consumer_ring_queue_to_file(struct MESA_shm_queue_head *head)
|
||||
continue ;
|
||||
}
|
||||
}
|
||||
p_payload_len = (int *)(p_file + MESA_SHM_LOG_PATH_LEN);
|
||||
p_payload_len = (int *)(p_file + file_len + 1);
|
||||
payload_len = *p_payload_len;
|
||||
payload = (char *)(p_payload_len + 1);
|
||||
n = snprintf(buf, sizeof(buf), "%s, %s\n", strtime, payload);
|
||||
@@ -270,14 +278,19 @@ void consumer_ring_queue_to_file(struct MESA_shm_queue_head *head)
|
||||
}
|
||||
void consumer_ring_queue_to_terminal(struct MESA_shm_queue_head *head, int producer_pid)
|
||||
{
|
||||
int *p_file_len = NULL;
|
||||
int file_len = 0;
|
||||
char *p_file = NULL;
|
||||
int *p_payload_len = NULL;
|
||||
char *payload = NULL;
|
||||
int payload_len = 0;
|
||||
char buf[MESA_SHM_LOG_BUF_PREFIX_LEN + MESA_SHM_RING_QUEUE_BLOCK_BUFLEN] = {0};
|
||||
char *payload = NULL;
|
||||
char buf[MESA_SHM_LOG_BUF_PREFIX_LEN + MESA_SHM_RING_QUEUE_BLOCK_SIZE] = {0};
|
||||
int n = 0;
|
||||
while(!MESA_shm_ring_queue_is_empty(head)){
|
||||
p_payload_len = (int *)((char *)(head + 1) + (head->blksize * head->rd_idx) + MESA_SHM_LOG_PATH_LEN);
|
||||
p_file_len = (int *)((char *)(head + 1) + (head->blksize * head->rd_idx));
|
||||
file_len = *p_file_len;
|
||||
p_file = (char *)(p_file_len + 1);
|
||||
p_payload_len = (int *)(p_file + file_len + 1);
|
||||
payload_len = *p_payload_len;
|
||||
payload = (char *)(p_payload_len + 1);
|
||||
n = snprintf(buf, sizeof(buf), "pid:%d, %s\n", producer_pid, payload);
|
||||
@@ -523,7 +536,8 @@ int main(int argc, char **argv)
|
||||
if(!MESA_shm_ring_queue_is_empty(ring_queue_head[i])){
|
||||
if(g_care_pid == CONSUMER_CARE_PID_SPEC){
|
||||
if(!producer_pid_is_cared(tmp_ovw->producer_pid)){
|
||||
MESA_shm_ring_queue_set_empty(ring_queue_head[i]);
|
||||
/*do not set empty, in order to improve performance for producer process*/
|
||||
/*MESA_shm_ring_queue_set_empty(ring_queue_head[i]);*/
|
||||
continue ;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user