C++併發程式設計框架Theron(8)——Theron中包含的類(二)

無鞋童鞋發表於2017-07-20

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 簡述

// 建構函式1
Framework (const uint32_t threadCount)
// 設定引數的建構函式2
Framework (const Parameters &params=Parameters())
// 建構函式3
Framework (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中所有內部事件counters
void 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))
// 重置未處理的訊息總數為0
void 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/

相關文章