在開發(fā)C++程序時,一般在吞吐量凸郑、并發(fā)裳食、實時性上有較高的要求。設(shè)計C++程序時芙沥,總結(jié)起來可以從如下幾點提高效率:
● l 并發(fā)
● l 異步
● l 緩存
下面將我平常工作中遇到一些問題例舉一二诲祸,其設(shè)計思想無非以上三點。
1任務(wù)隊列
1.1 以生產(chǎn)者-消費者模型設(shè)計任務(wù)隊列
生產(chǎn)者-消費者模型是人們非常熟悉的模型而昨,比如在某個服務(wù)器程序中救氯,當(dāng)User數(shù)據(jù)被邏輯模塊修改后,就產(chǎn)生一個更新數(shù)據(jù)庫的任務(wù)(produce)配紫,投遞給IO模塊任務(wù)隊列径密,IO模塊從任務(wù)隊列中取出任務(wù)執(zhí)行sql操作(consume)。
設(shè)計通用的任務(wù)隊列躺孝,示例代碼如下:
詳細(xì)實現(xiàn)可參見:
務(wù)隊列使用技巧
1.2.1 IO 與 邏輯分離
比如網(wǎng)絡(luò)游戲服務(wù)器程序中享扔,網(wǎng)絡(luò)模塊收到消息包,投遞給邏輯層后立即返回植袍,繼續(xù)接受下一個消息包惧眠。邏輯線程在一個沒有io操作的環(huán)境下運行,以保障實時性于个。示例:
注意氛魁,此模式下為單任務(wù)隊列,每個任務(wù)隊列單線程厅篓。
1.2.2 并行流水線
上面的只是完成了io 和 cpu運算的并行秀存,而cpu中邏輯操作是串行的。在某些場合羽氮,cpu邏輯運算部分也可實現(xiàn)并行或链,如游戲中用戶A種菜和B種菜兩種操作是完全可以并行的,因為兩個操作沒有共享數(shù)據(jù)档押。最簡單的方式是A澳盐、B相關(guān)的操作被分配到不同的任務(wù)隊列中。示例如下: