C++并发编程框架Theron(8)——Theron中包含的类(二)

来源:互联网 发布:跳舞机软件下载 编辑:程序博客网 时间:2024/05/22 13:38

1 前言
  本篇文章主要接着上一篇来介绍Theron框架库中包含的类。上一篇中主要介绍了Theron下Actor,Address,AllocatorManager和Catcher类,在本篇文章中我会相继介绍DefaultAllocator,EndPoint(包含Parameters),Framework(包含Parameters),IAllocator和Receiver类,其中最常用的是Framework和Receiver。
2 Theron::DefaultAllocator类
 2.1 简述
  该类是一个默认的通用内存分配器,它是扩展自C++中运算符new和delete来支持一致分配功能,分配统计,和磁盘保护区检测。
  DefaultAllocator是Theron内部进行内存分配的类,除非它被通过AllocatorManager::SetAllocator(上一篇博文中有详细介绍)设置一个定制的分配器所替代。如果你需要的话,DefaultAllocator也可能被用来在用户应用代码中作为分配器。我们可以通过AllocatorManager::GetAllocator来取出使用。由于它并不是特别常用,这里也不再做详细的介绍,感兴趣可以查看官网的介绍。
3 Theron::EndPoint类
 3.1 简述
  这是网络通信对象,能够与其他线程以及远程主机(分布式编程)上的actors通信。该类的单实例必须在每个应用中被构造,然后意图使用于一堆用于分布式计算的分布式应用中。如果一个Endpoint被创立,它必须比它相关联的frameworks,actors和receivers“活”的更长。包含它的头文件是#include <EndPoint.h>
 3.2 公共的成员函数

 // 显式构造函数 EndPoint (const char *const name, const char *const location, const Parameters params=Parameters())// 析构函数~EndPoint ()// 获取EndPoint事例的名称const char * GetName () const// 连接该Endpoint对象和其他(例如远程)的EndPoint对象bool Connect (const char *const address)

 3.3 Theron::EndPoint::Parameters类
  这个Prameters结构可以传给EndPoint构造函数。目前该类还是空作为未来的扩展。
4 Theron::Framework类
 4.1 简述
  好了,终于到了我们除了Actor类之外第二重要的类了,它是一个管理类,用来主持,管理和执行actors。我们应该在创建任何actors之前,在非actor应用代码中构建一个Framework实例。Actor对象接着可以在构造函数中通过传递framework作为一个参数给actor基类来被创建,如下:

class MyActor : public Theron::Actor{public:    explicit MyActor(Theron::Framework &framework) : Theron::Actor(framework)    {    }};Theron::Framework framework;

  实际上,每个framework包含一个线程池,用来执行actors中创建的消息处理函数。一个framework中的线程用来执行其包含的actors,并且不能用来执行其他frameworks中的actors。工作线程的初始数量可以通过一个现实参数传递给 Framework::Framework构造器,在构造该framework的时候给出。此外,线程的数量可以通过调用 SetMinThreads或者SetMaxThreads在程序执行期间增加或者减少。 GetCounterValue可以查询当前使能线程的使用情况。
  工作线程可以使用当前系统中存在的线程对象来创建和同步。这些线程对象的不同实现让Theron使用在不同线程基元,这些都是可以可以提前预设的。
  我们可以在一个应用中构造多个Framework对象。每个Framework中的actors可以被单独的工作线程池所处理。一个framework中的Actors可以发送消息给其他framework中的actors,但是它只能被它所属的framework的线程池执行。
 4.2 简述

// 构造函数1Framework (const uint32_t threadCount)// 设置参数的构造函数2Framework (const Parameters &params=Parameters())// 构造函数3Framework (EndPoint &endPoint, const char *const name=0, const Parameters &params=Parameters())// 析构函数~Framework ()// 发送一条消息给某个实体(例如actor)template<typename ValueType >bool Send (const ValueType &value, const Address &from, const Address &address)// 限制该framework中工作线程的最大数量void SetMaxThreads (const uint32_t count)// 限制该framework中工作线程的最小数量void SetMinThreads (const uint32_t count)// 返回当前限制的最大工作线程数量uint32_t GetMaxThreads () const// 返回当前限制的最大工作线程数量uint32_t GetMinThreads () const// 获取当前framework中实际工作线程的数量uint32_t GetNumThreads () const// 获取framework中活跃的工作线程的峰值数uint32_t GetPeakThreads () const// 设置通过GetCounterValue查询的可接近的counters的总数uint32_t GetNumCounters () const    Returns the number of counters available for querying via GetCounterValue. More... // 返回给定索引的counters字符串名称const char * GetCounterName (const uint32_t counter) const// 重启framework中所有内部事件countersvoid ResetCounters ()// 获取一个具体事件counter的当前值uint32_t GetCounterValue (const uint32_t counter) const// 获取当前一个具体事件counter的每个线程值uint32_t GetPerThreadCounterValues (const uint32_t counter, uint32_t *const perThreadCounts, const uint32_t maxCounts) const// 设置没有对应处理函数的消息的后备消息处理函数template<typename ObjectType >bool    SetFallbackHandler (ObjectType *const actor, void(ObjectType::*handler)(const Address from))// 设置没有对应处理函数的消息的后备消息处理函数template<typename ObjectType >bool    SetFallbackHandler (ObjectType *const actor, void(ObjectType::*handler)(const void *const data, const uint32_t size, const Address from))

5 Theron::IAllocator类
 5.1 简述
  它是一个通用的内存分配器的接口。这个接口类定义了Theron使用的分配器的期望接口。它可以通过之前介绍的AllocatorManager::SetAllocator来描述分配器类型的特征。
  我们通过IAllocator接口作用在在一个定制的分配器上,用户可以提供一个定义分配器应用在Theron中。当通过AllocatorManager::SetAllocator设置完成,DefaultAllocator就会在Theron中被取代使用。当默认分配器被成功取代,用户就可以控制,隐藏,或者优化Theron中内存的分配器。Theron中所有内部堆空间都是通过使用AllocatorManager::SetAllocator分配,和任何Theron对象被构建前分配器被设置一样。
 5.2 公共的成员函数

// 默认构造函数IAllocator ()// 虚拟析构函数virtual ~IAllocator ()// 分配一块相邻的内存virtual void *  Allocate (const SizeType size)=0// 分配一块对齐于多字节边界的给定的相邻内存virtual void *  AllocateAligned (const SizeType size, const SizeType)// 释放一块之前申请的相邻的内存virtual void Free (void *const memory)=0// 释放一块之前申请的已知尺寸大小的相邻内存virtual void    Free (void *const memory, const SizeType)

6 Theron::Receiver类
 6.1 简述
  Receiver是一个和actor一样有自己独立地址的独立实体,可以接收actor发送的消息。包含它的头文件是#include <Receiver.h>,一个receiver可以在非actor用户代码中被实例化,例如main()函数中等。
  Receiver此外还可以提供注册消息处理函数来处理它们接收到的消息,这个和actor的功能一样。它允许拥有它的线程注册回调性质的消息处理函数,当收到注册的类型信息则该消息函数自动执行。我们可以通过Receiver::Wait来同步收到的消息,消息处理函数的结果只有在消息收到之后才会被执行。
 6.2 公共的成员函数

// 默认构造函数 Receiver ()// 有参构造函数Receiver (EndPoint &endPoint, const char *const name=0)// 析构函数~Receiver ()// 返回receiver的独一无二的地址Address GetAddress () const// 为某个类型消息注册一个消息处理函数template<class ClassType , class ValueType >bool    RegisterHandler (ClassType *const owner, void(ClassType::*handler)(const ValueType &message, const Address from))// 析构一个之前的注册函数template<class ClassType , class ValueType >bool DeregisterHandler (ClassType *const owner, void(ClassType::*handler)(const ValueType &message, const Address from))// 重置未处理的消息总数为0void Reset ()// 返回未处理的消息总数uint32_t Count () const// 一直等到接收到消息uint32_t Wait (const uint32_t max=1)// 消耗消息,直到达到限制的个数uint32_t Consume (const uint32_t max)

7 小结
  和上一篇博文一起,我们学习了Theron框架中所有的类的用处与包含的类方法。它们是Theron框架的程序基础,当然只有多多实践我们才能体会它们的真正用处。希望大家多跑跑官网给出的许多案例程序,只有通过实践我们才能很好的体会到Theron真正的魅力!
   以上是个人学习记录,由于能力和时间有限,如果有错误望读者纠正,谢谢!
  转载请注明出处:http://blog.csdn.net/FX677588/article/details/74359823


   参考文献:
   Theron框架官网http://www.theron-library.com/

原创粉丝点击