for迴圈與序列化 並行化Stream流效能對比

2021-10-18 22:05:12 字數 2261 閱讀 3819

並行流parallelstream注意事項

1、parallelstream是執行緒不安全的

2、parallelstream適用的場景是cpu密集型的,只是做到別浪費cpu,假如本身電腦cpu

的負載很大,那還到處用並行流,那並不能起到作用

3、i/o密集型 磁碟i/o、網路i/o都屬於i/o操作,這部分操作是較少消耗cpu資源,一般並

行流中不適用於i/o密集型的操作,就比如使用並流行進行大批量的訊息推送,涉及到了

大量i/o,使用並行流反而慢了很多

4、在使用並行流的時候是無法保證元素的順序的,也就是即使你用了同步集合也只能保

證元素都正確但無法保證其中的順序

解決並行流的執行緒安全問題:多執行緒下,使用並行流會有執行緒安全的問題

根據需要進行不同的處理:

1、使用同步**塊 synchronized (比如使用foreach迴圈處理時)

2、使用執行緒安全的集合 vector、collections.synchronizedlist(list)

3、呼叫stream流的 collect/toarray 方法

普通for迴圈、序列流、並行流在迴圈處理資料時效能對比:

測試**:

public

static

void

main

(string[

] args)

stopwatch stopwatch =

newstopwatch()

; stopwatch.

start()

;for

(int i =

0; i < list.

size()

;i ++)}

stopwatch.

stop()

; system.out.

println

("*****for===耗費:"

+stopwatch.

gettime()

);stopwatch.

reset()

; stopwatch.

start()

; list.

stream()

.filter

(x -

> x.

endswith

("0000000"))

.foreach

(a->);

stopwatch.

stop()

; system.out.

println

("*****stream===耗費:"

+stopwatch.

gettime()

);stopwatch.

reset()

; stopwatch.

start()

; list.

parallelstream()

.filter

(x -

> x.

endswith

("0000000"))

.foreach

(a->);

stopwatch.

stop()

; system.out.

println

("*****parallelstream===耗費:"

+stopwatch.

gettime());}

總結:修改上面**資料量的大小結果不同,

可以看到,序列化流在資料量很小的情況下,效能最差。而並行化流則處於波動的狀態。

所以單單從資料量上可以看出:

for迴圈的效能隨著資料量的增加效能也越來越差。

序列化流則在資料量小的情況下效能差,資料量中、大的時候效能略高於for迴圈,但當資料量特別大時,效能也變得越差。

並行化流受cpu核數的影響,在本機2核下,在資料量小的情況下效能略高於序列化流,略低於for迴圈,在資料量中的情況下差不多,在資料量比較大時效能最差,但當資料量特別大時,效能也變得更好。

如果想要使用parallelstream想提高效能,一定要根據實際情況做好測試,因為並行化的流效能不一定比序列化流效能高。

序列化與發序列化

1.序列化與反序列化都用的是相同的 binaryformatter bf new binaryformatter 2.使用 流 的方式 filestream fs new filestream 序列化內容路徑 一般為本地bin debug檔案中 類名.bin filemode.openorcreat...

序列化與反序列化

把複雜的資料型別壓縮到乙個字串中 serialize 把變數和它們的值編碼成文字形式 unserialize 恢復原先變數 eg stooges array moe larry curly new serialize stooges print r new echo print r unserial...

序列化與反序列化

序列化是將物件處理為位元組流以儲存物件或傳輸到記憶體 資料庫或檔案。其主要目的是儲存物件的狀態,以便可以在需要時重新建立物件。相反的過程稱為反序列化。通過序列化,開發人員可以儲存物件的狀態,並在需要時重新建立該物件,從而提供物件的儲存以及資料交換。通過序列化,開發人員還可以執行類似如下的操作 通過 ...