C++併發程式設計框架Theron(8)——Theron中包含的類(二)
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 ¶ms=Parameters())
// 建構函式3
Framework (EndPoint &endPoint, const char *const name=0, const Parameters ¶ms=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/
相關文章
- 併發程式設計(二)——併發類容器ConcurrentMap程式設計
- 併發程式設計(二)程式設計
- Go 併發程式設計 - 併發安全(二)Go程式設計
- 《java併發程式設計的藝術》併發工具類Java程式設計
- Java 併發程式設計 Executor 框架Java程式設計框架
- 《java併發程式設計的藝術》併發容器和框架Java程式設計框架
- java併發程式設計:Thread類的使用Java程式設計thread
- .NET 中的併發程式設計程式設計
- java併發程式設計工具類JUC第二篇:ArrayBlockingQueueJava程式設計BloC
- 《java併發程式設計的藝術》Executor框架Java程式設計框架
- 併發程式設計(一)——同步類容器程式設計
- 併發程式設計——基礎概念(二)程式設計
- 《java學習二》併發程式設計Java程式設計
- 《java併發程式設計的藝術》原子操作類Java程式設計
- Java併發程式設計中的設計模式解析(一)Java程式設計設計模式
- go 併發程式設計案例二 常見併發模型介紹Go程式設計模型
- 鴻蒙程式設計江湖:併發程式設計基礎與鴻蒙中的任務併發鴻蒙程式設計
- 併發程式設計面試必備:JUC 中的 Atomic 原子類總結程式設計面試
- 併發程式設計程式設計
- Java併發程式設計——基礎知識(二)Java程式設計
- Java 併發程式設計(十) -- ReentrantLock中的SyncJava程式設計ReentrantLock
- Java 併發程式設計(六) -- ThreadPoolExecutor中的WorkerJava程式設計thread
- Java 併發程式設計(八) -- AbstractQueuedSynchronizer中的NodeJava程式設計
- Java併發程式設計中的設計模式解析(二)一個單例的七種寫法Java程式設計設計模式單例
- 併發程式設計:DEMO:比較Stream和forkjoin框架的效率程式設計框架
- 併發程式設計從零開始(十一)-Atomic類程式設計
- java併發程式設計系列原理篇--JDK中的通訊工具類SemaphoreJava程式設計JDK
- java併發程式設計系列:java併發程式設計背景知識Java程式設計
- Java併發程式設計的藝術,解讀併發程式設計的優缺點Java程式設計
- 併發容器與框架——併發容器(二)框架
- Java併發程式設計---java規範與模式下的併發程式設計1.1Java程式設計模式
- 併發程式設計中,你加的鎖未必安全程式設計
- Go 併發程式設計中的經驗教訓Go程式設計
- Java併發程式設計的藝術(五)——中斷Java程式設計
- 併發程式設計之synchronized(二)------jvm對synchronized的優化程式設計synchronizedJVM優化
- 併發容器、框架、工具類框架
- Python併發程式設計Python程式設計
- 併發程式設計 synchronized程式設計synchronized
- Go 併發程式設計Go程式設計