使用 Rx 的計算和最大化執行緒處理並行任務

Spike發表於2016-08-03

隨著手機的發展, 其效能已經與電腦越來越接近, 也會有一些複雜耗時的並行任務需要處理, 對於非同步與並行, RxAndroid是我們的最佳選擇. 那麼讓我來使用例項介紹一下吧.

160328-threads-logo

在計算排程器Schedulers.computation()中, 可以並行處理任務, 核數是Rx根據手機CPU定製的, 在我的華為P8手機(8核)中, 使用的是8個執行緒. 但是根據Java執行緒的最佳配置而言, 8核最佳是9個執行緒, 即執行緒數等於核數+1.

本文原始碼的GitHub下載地址

歡迎Follow我的GitHub: https://github.com/SpikeKing


配置

RxAndroid+ButterKnife, 我是ButterKnife的粉絲.


計算執行緒

MAX是並行執行的任務數. 使用flatMap逐個分發到計算執行緒computation中, 執行耗時任務intenseCalculation.

使用intenseCalculation模擬耗時任務.


最大執行緒

最大執行緒數 = CPU核數 + 1

由於CPU的核數是8, 因此我們選擇9個執行緒. 建立執行器executor, 使用執行器建立Rx的排程器Scheduler, 處理非同步任務.

高版本計算CPU核數的方式.

低版本, 參考.


迴圈賽模式

迴圈賽模式(Round-Robin)是把資料分組, 按執行緒數分組, 每組9個, 一起傳送處理. 這樣做, 可以減少Observable的建立, 節省系統資源, 但是會增加處理時間, 是空間和時間的綜合考慮.


這是Compute \ Max \ Group三種效果的時間對比, 可以發現Max的時間最優, 因為比Compute多一個執行緒, 但是Group會更加節省資源一些. 根據所執行的並行任務使用Rx吧.

效果

160328-threads-device

OK, that’s all! Enjoy it!

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

使用 Rx 的計算和最大化執行緒處理並行任務

相關文章