Ceph 线程池与工作队列

本文介绍了Ceph中的线程管理,包括Thread类的封装、ThreadPool的结构和工作原理,以及SharedThreadPool的特点。ThreadPool维护多个WorkThread和WorkQueue,用于处理不同类型的任务。SharedThreadPool则使用共享消息队列,根据操作优先级和权重进行调度。
摘要由CSDN通过智能技术生成

Thread相关:

Ceph中线程的在src/common/Thread.h中定义

class  ThreadPool {
  private :
   pthread_t thread_id;
  public :
   Thread( const  Thread& other);
   const  Thread& operator=( const  Thread& other);
   Thread();
   virtual  ~Thread();
  protected :
   virtual  void  *entry() = 0; //子类需要实现此函数,作为线程入口
  private :
   static  void  *_entry_func( void  *arg);
  public :
   const  pthread_t &get_thread_id();
   bool  is_started();
   bool  am_self();
   int  kill( int  signal ); //杀掉自己
   int  try_create( size_t  stacksize);
   void  create( size_t  stacksize = 0); //创建线程,里面传入了entry函数
   int  join( void  **prval = 0); //阻塞自己等待线程结束,回收资源
   int  detach(); //父子线程分离
};

一个线程在创建时调用pthread_create函数来传入entry函数,杀死线程调用pthread_kill函数,当线程被杀死之后,必须调用pthread_join函数来进行线程资源的回收,如果不调用此函数,就会出现类似zombie process。如果要想让系统自己回收线程资源,就要将线程与父线程分离即调用pthread_detach.通过接口对比,我们发现src/common/Thread.h中定义的class thread,实际上是对线程代码ceph自己实现的一层封装。

Ceph中所有要用的线程必须继承Thread类,分别是普通线程,SafeTimerThread类型线程,FinisherThread类线程以及ThreadPool内部线程.本文主要介绍ThreadPool的内部线程.

ThreadPool相关:

ThreadPool的简要定义如下:

class  ThreadPool :  public  md_config_obs_t {
   CephContext *cct;
   string name;
   string thread_name;
   string lockname;
   Mutex _lock;
   Cond _cond;
   bool  _stop;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值