高并发服务器-线程池实现(c++版本)

为啥需要线程池?

什么情况可以用:

我们经常会遇到一个队列,其中的消息依赖大量的耗时操作,一个线程从队列拉取完全处理不过来,这时候,就需要我们引入线程池的技术。

什么任务队列不适合用

如果队列的消息是有状态的,不建议用,因为多线程的任务分发是随机的,如果你的任务依赖于前一次处理的结果或者对时序有影响,请从整个系统的设计重新考虑任务队列的设计,将不同业务的数据分配到不同的任务队列,来实现对耗时队列的处理,而不是将有状态的任务到多线程处理,否则不可避免要面临数据共享的多线程竞争问题。

线程池如何设计?

1、线程池需要涉及的数据结构接口

工作线程:其中维持了池结构的成员指针,工作worker线程需要通过池成员指针,来获取任务队列的任务。

class CWorker
{
public:
    CWorker(): m_nExit(0)
    {}
    virtual ~CWorker() {}

    static void* WorkerCallBack(void * p);

public:
    int m_nExit;
    pthread_t m_PID;
    CThreadPool* m_pPool;
};

任务结构,虚函数RunJob,根据实际情况派生该结构并实现对应的任务队列实现处理,可自定义自己的任务队列结构。


class CJobs
{
public:
    CJobs() {};
    virtual ~CJobs() {};

    virtual void RunJobs() = 0;
    static vo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值