C++ 多線程編程

在開發(fā)C++程序時,一般在吞吐量、并發(fā)、實時性上有較高的要求。設計C++程序時,總結起來可以從如下幾點提高效率:

● l 并發(fā)

● l 異步

● l 緩存

下面將我平常工作中遇到一些問題例舉一二,其設計思想無非以上三點。

1任務隊列

1.1 以生產者-消費者模型設計任務隊列

生產者-消費者模型是人們非常熟悉的模型,比如在某個服務器程序中,當User數據被邏輯模塊修改后,就產生一個更新數據庫的任務(produce),投遞給IO模塊任務隊列,IO模塊從任務隊列中取出任務執(zhí)行sql操作(consume)。

設計通用的任務隊列,示例代碼如下:

詳細實現可參見:

推薦C語言C++學習交流群:231662552

務隊列使用技巧

1.2.1 IO 與 邏輯分離

比如網絡游戲服務器程序中,網絡模塊收到消息包,投遞給邏輯層后立即返回,繼續(xù)接受下一個消息包。邏輯線程在一個沒有io操作的環(huán)境下運行,以保障實時性。示例:

推薦C語言C++學習交流群:231662552??

注意,此模式下為單任務隊列,每個任務隊列單線程。

1.2.2 并行流水線

上面的只是完成了io 和 cpu運算的并行,而cpu中邏輯操作是串行的。在某些場合,cpu邏輯運算部分也可實現并行,如游戲中用戶A種菜和B種菜兩種操作是完全可以并行的,因為兩個操作沒有共享數據。最簡單的方式是A、B相關的操作被分配到不同的任務隊列中。示例如下:

推薦C語言C++學習交流群:231662552??? ?
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容