在併發方法中,咱們要保證一致性和準確性,可是有但願在給定的硬件條件下達到最佳性能.html
當咱們徹底使用了不可變共享變量模型,那麼咱們將很容易地規避競爭條件或者一致性的問題.由於當線程再也不競爭訪問可變數據的時候,程序就無需考慮變量在多個線程之間的可見性問題和穿越內存柵欄的問題,同時,咱們也不準擔憂如何控制線程的執行序列.併發
因此咱們應當儘量提供共享不可變性!!!不然就應該遵循你隔離可變性原則,也就是隻有一個線程能夠訪問可變變量.性能
那麼咱們在拆分任務時,設計poolsize和tasks是須要考慮的,具體多少參見:求解大型素數的問題spa
首先咱們要將任務拆分爲更小的,能夠併發的子任務.若是任務是IO密集型或者有關鍵的IO操做,那麼開多個線程將有助於提升性能,在這種狀況下,線程數應該遠遠大於cpu核心數,具體多少 使用 線程數=cpu可用核心數/(1-阻塞係數),阻塞係數在0-1 來計算.線程
對於計算密集型,poolsize和tasks的大小是須要考慮的,若是問題能夠被拆分紅多個子任務,那麼程序少開和處理器那麼多個線程,對程序是大有助益的.同時咱們要注意少許線程執行多個任務的時候的均衡負載問題.設計