上篇日誌提到我想用 ace 和 loki 庫設計乙個類似 openmp 的並行庫,前兩天仔細想了想,勾勒出了大體的框架,以供討論;)
看下面**之前,首先要熟悉 loki 庫里面對 functor 模板類的使用(《 c++ 設計新思維》一書有詳細描述,不過看此書要做好心理準備:)),否則看了也是一頭霧水; ace 的部分暫未描述出來,先將其隱藏在paralleltask類當中,所以對 ace 不了解也沒關係。
結合下面**,先把各個類的功能說一下:
(1) 函式task1、仿函式task2和類task3中的成員函式 這三種形式基本列出了c++中具有函式功能的幾種表示形式,而執行乙個函式就是執行一項任務。下面都將以任務的概念來描述序列和並行。另外,這裡返回值都 用了void,並且沒有傳入傳出引數是因為這些都是抽象出來的概念,最終總是有辦法把任務抽象到這幾種形式的。
(2)關於typedef loki::functor<> serialtask,這裡用了 loki::functor<>,詳細的我不解釋了,看書吧,大概的用處就是用了這個模板類,可以把上面三種(實際有更多)函式形式完美的包裝進去,令函式執行 的 預 備工作(準備物件和輸入引數等等這些事情)和執行過程(就是執行函式體)分離開來,這樣我們就可以把任務的準備期和執行期很好的分離,方便巨集觀設計。如果 了解設計模式中的command模式,應該會很快領悟到。另外利用乙個chain模板函式,此模板類還可以把各個任務方便的序列起來,以實現序列功能,故 在此將其typedef為 serialtask。
(3)關於類paralleltask,顧名思義,這個類就是具有並行功能類,我可以通過其pushtask成員函式方便的把任務塞給它,這些任務都將並行執行。而讓它們何時執行,可以通過呼叫 operator()來觸發。此類也可以當作乙個任務(由眾多小任務組成)來看待,而且有了operator(),也可以方便的交由serialtask物件來將它與其它任務序列起來。這個類背後的實現會用到ace,因為ace本身具有很強大的跨平台的多執行緒庫。
(4) sample1_2_3() 、 sample1_23() 、sample1_23() 、 sample123() 是我寫的幾個例子,通過這幾個例子可以更容易理解我的設計意圖。
void task1();
struct task2
;
struct task3
;
typedef loki::functor<> serialtask;
class paralleltask
;
serialtask subtask1(task1); // subtask1物件將會執行task1()函式。
task2 t2;
serialtask subtask2(t2); // subtask2物件將會執行t2(),也就是執行t2::operator()。
task3 t3;
serialtask subtask3(&t3, &task3::memberfun); // subtask3物件將會t3.memberfun()。
serialtask subtask1_2(chain(subtask1, subtask2)); //subtask1_2物件將會序列執行subtask1和subtask2,也就是先執行task1(),接著執行t2::operator()。
serialtask subtask1_2_3(chain(subtask1_2, subtask3)); //subtask1_2_3物件將會序列執行subtask1、subtask2和subtask3,也就是先執行task1(),接著執行t2::operator(),最後執行t3.memberfun()。
// 此函式通過呼叫subtask1_2_3()來序列執行任務1,2,3
void sample1_2_3()
// 此函式表示先執行任務1,然後並行執行任務2和3
void sample1_23()
// 此函式表示並行執行任務1,2和3
void sample123()
GameFramework的初步設計
最近這幾天在搞乙個gameframework,其實就是在引擎基礎上增加乙個遊戲框架,對遊戲進行抽象,對引擎使用的一些封裝。在進行具體設計的時候很多細節問題是值得思考的。總結如下 總的來說我所設計的遊戲框架從功能上來講就是兩件事,乙個是遊戲的狀態管理 什麼選單狀態,遊戲狀態等等 在乙個就是ai管理,又...
關於微服務架構的許可權控制初步設計
最近開發的系統是前後端分離 微服務分布式架構,不同於單體應用的許可權身份校驗機制,前後端分離的情況下,無法直接確認前端請求者的身份許可權,需要通過第三方鑑權中心來操作,身份校驗較為簡單,直接過濾網關級別的請求即可,但是許可權校驗就比較複雜了。資源 物件 樞紐 整體關係如下 物件通過樞紐進行資源的許可...
談談跨鏈平台BitXHub的架構設計
我們和跨鏈技術的緣分從乙個客戶需求開始 在養老金行業的區塊鏈應用中我們遇到了乙個跨鏈的需求,乙個客戶使用趣鏈聯盟鏈構建了乙個養老金鏈,同時另一方客戶則使用fabric構建了另乙個區塊鏈服務,他們所做的業務分別位於養老金業務流程中的兩個不同階段,參與的機構和使用者也不盡相同,為了從底層開始打通這兩個區...