天天看點

ABAP并發計算的一個執行個體

During myTask performance optimization, I realized that currently the read implementation of 5 expanded nodes: Userstatus, document history, document item, attachment etc are done sequentially.

如果看看現在 Java8的parallelStream 的一些sample code, 再來review task offline 5個node的讀取, 發現它們也滿足并行計算的三要素:

(1) 可重入

(2) Immutable state

(3) Read only data access

是以我們可以考慮把每個node 資料的讀取分别放到一個"新線程"(用ABAP術語來講,應該是新的internal session )來做,這樣就和gateway 背景實作batch操作的設計完全一緻了。Gateway在SPRO裡有個配置控制batch request是串行還是并行實作,預設是并行。

理論上假設5個node 分别消耗的時間是1,2,3,4,5秒. 現在的串行實作,最後的時間是sum(1,2,3,4,5) = 15秒,改成并行處理後是max(1,2,3,4,5) 約等于5秒(加上少許線程同步的時間)

具體的測試report參考AG3 report ZATTACHMENT_SEQUEN_VS_PARALL:

ABAP并發計算的一個執行個體

測試結果

AG3上取440個attachment,一次用串行的方式執行,另一次分成4個線程分别執行,每個線程裡仍然call的未優化的代碼。用代碼比較確定兩次執行傳回的結果完全一緻。

ABAP并發計算的一個執行個體

詳細測試資料如下:

ABAP并發計算的一個執行個體