高速任务流系列:任务处理单元

内存池引用:定制尺寸内存池

消息队列引用:简易消息队列

用于通用任务流。

#pragma once

#include "core/common_tool/CustQueue.h"
#include "core/common_tool/MemPool.h"
#include <thread>
#include <typeinfo>

template<class T, std::size_t S>
class ServiceUnit
{
public:
    ServiceUnit() {}
    ~ServiceUnit() {}

    void run()
    {
        static long thousand = 0;
        static int count = 0;
        running = true;
        
        s_thread = std::thread([this] {
            T* node = nullptr;
    	    while (running)
    	    {
    	    	node = pop();
                process(node);
                push(node);
                count++;

                if (count >= 1000) {
                    thousand++, count = 0;
                    debug_print("[%s] has process %ld K message, unit size: %ld Bit, buffer capacity: [%ld/%ld]", 
                                typeid(T).name(), thousand, sizeof(T), s_pool.size(), S);
                }
    	    }
    	});
    }

    void stop()
    {
        running = false;
        s_queue.set(nullptr);
        s_thread.join();
    }

    T* apply()
    {
        T* node = s_pool.get();
    	if (node)
    	    memset(node, 0, sizeof(T));
    	return node;
    }

    void deliver(T* node)
    {   
        s_queue.set(node);
    }

private:
    T* pop()
    {
	    return s_queue.get();
    }

    void push(T* node)
    {
	    s_pool.del(node);
    }

    void process(T* node) {
       return;
    }

private:
    CustQueue<T*> s_queue;
	MemPool<T, S> s_pool;
    bool running;
    std::thread s_thread;
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值