Ceph代码分析---线程池
来源:互联网 发布:婚纱照精修用什么软件 编辑:程序博客网 时间:2024/05/29 17:21
对于计算密集型的业务通常使用线程池进行多线程并发处理,线程池在一定程度上可以有效的提高CPU的利用率,降低无用消耗。Ceph中实现了两种类型的线程池类(本质相同),并实现消息队列处理类。其中线程池类负责具体线程创建,维护和销毁。消息队列处理类则负责队列的管理,包括入队,出队等,消息队列类为一个模板类,保证其处理数据类型的通用性。
如图1所示为ThreadPool线程池类,该类中定义的成员变量_threads用于保持创建的线程,work_queues变量则保存了由该线程池中线程处理的消息队列。
线程池创建后可以创建指定数量(以参数而定)的线程,而线程会调用其工作函数进行具体的工作。在ThreadPool线程池中,线程的工作函数会调用线程池的worker成员函数进行具体的工作。
线程池的worker成员函数会遍历work_queues,从其中找出每一个消息队列实例,并调用该实例的函数遍历其中保存的消息,并进行消息的具体处理工作。
线程池可以对多种类型的消息队列进行处理,其实现方式是利用了面向对象多态的特性。线程池成员work_queues本身是一个消息队列超类,而具体使用时的消息队列都有各自的实现。
如图1所示为ThreadPool线程池类,该类中定义的成员变量_threads用于保持创建的线程,work_queues变量则保存了由该线程池中线程处理的消息队列。
线程池创建后可以创建指定数量(以参数而定)的线程,而线程会调用其工作函数进行具体的工作。在ThreadPool线程池中,线程的工作函数会调用线程池的worker成员函数进行具体的工作。
线程池的worker成员函数会遍历work_queues,从其中找出每一个消息队列实例,并调用该实例的函数遍历其中保存的消息,并进行消息的具体处理工作。
线程池可以对多种类型的消息队列进行处理,其实现方式是利用了面向对象多态的特性。线程池成员work_queues本身是一个消息队列超类,而具体使用时的消息队列都有各自的实现。
另外,为了保证消息队列的灵活性,消息队列超类的入队,出队和处理函数都实现为虚函数,保证具体的处理动作可以由子类实现。后续博文可以看到Ceph如何继承相应消息队列类,并进行具体工作的。
图1
Ceph中实现的另一个线程池类是SharedThreadPool,该类的实现思路与ThreadPool类似。两者的不同之处在于对消息队列的处理方式。ThreadPool实现对多(种)队列的处理,并且其中的每种队列的处理方式可能不同。而SharedThreadPool则实现了一种多线程共享队列的处理方式,也即只有一个消息队列,多个线程同时对该队列进行处理。
图2
0 0
- Ceph代码分析---线程池
- 【分析】Ceph通用模块--线程池
- ceph存储 ceph集群线程池实现
- ceph源码分析之线程介绍
- ceph存储 FUSE调用流程代码分析
- ceph的pool创建流程--代码分析
- 线程池(代码简单分析)
- Ceph网络模块(3)——AsyncMessenger代码流程分析
- 基于ceph的cinder backup功能代码分析
- Ceph网络模块(3)——AsyncMessenger代码流程分析
- ceph存储 Linux内核分析coredump文件内核代码崩溃
- 一个线程池实例代码的分析
- 线程池实现代码分析(一)
- glib库线程池代码分析
- Java 线程池框架核心代码分析
- Java线程池框架核心代码分析
- Java 线程池框架核心代码分析
- 某线程池代码分析 <一>
- cocos2d-x-3.x-026 移植cocos的jnihelper及用法说明
- spring 入门学习
- 第二十二节 蓝牙协议栈之从机通讯
- Android开发优化之——对界面UI的优化(1)
- 设计原则(二)里氏替换原则(LSP)
- Ceph代码分析---线程池
- android:ToolBar详解(手把手教程)
- 从WEB开发角度谈网站前端优化
- 37,typedef的用法
- CCNA学习笔记十一 路由器开启Telnet
- Spark运行架构
- 面试小记
- 《剑指Offer》读书笔记09:变态青蛙跳
- Codeforces 272C Dima and Staircase (线段树区间更新 或 线性扫)