閱讀322 返回首頁    go 阿裏雲 go 技術社區[雲棲]


actor-based programming與構建大規模擴展性的並行係統

1.actor-based  programming

 actor based 類似於object based ,但是它比object 多了自己的message queue 和message processor、message handler

也就是說一個actor是一個獨立的處理單元,但是他不是真正的物理上的thread

可以看成是輕量級的thread。

一個actor可以給另一個actor push msg

這樣係統中就可以存在大量的獨立活動單元,是並行係統的基本組件。

2.Intel TBB(Threading Build Block)

這是intel的一個開源的高性能線程庫,它可以很大效率的支持多個任務的並行(這是隱藏實際的物理的thread的),我們可以把上麵的actor分配給TBB去調度管理,來實現高性能的並行係統。

這個庫還提供了各種thread-safe的container,而我們知道標準c++的stl的container都是線程不安全的。

 

感想

這種actor-based方法讓我想到了QT中的Qwidget,他們可以互相通信,有各自的message queue,但是不同的是Qwidget是單線程的,沒有一個多線程庫去對他們之間做並發。

 

使用actor-based方法構建並行係統,比我們單純使用多線程來實現的好處是:

1.純多線程的係統受線程數量的影響,當係統複雜度提高時,線程數目要升高,會降低性能甚至不能擴展係統。

2.純多線程的係統一般要使用lock critical area等來對線程進行互斥,當係統複雜度提升時,各種dead lock等問題也會出來,降低性能。而actor-based是share nothing的,一個actor裏麵的數據是相互獨立的,不必使用線程間的互斥和等待。

但是個人認為這種情況是理想的,有時還是要用鎖的,關於這個,現在有一種transactional memory的東西來實現無鎖的多線程並發,不過還處於實驗階段。

最後更新:2017-04-03 21:30:16

  上一篇:go Oracle語法和SQL語法的一些區別
  下一篇:go 寬帶中國2013啟動:三大運營商立下軍令狀