WEB專案中一些簡單非同步任務的組織與排程方法

2021-07-04 16:44:38 字數 1144 閱讀 2800

在一些web專案中,為提公升使用者體驗,一些耗時操作可以在使用者提交後非同步進行,而不需要立即顯示執行結果。因此可以將這些操作委託給後台執行緒進行。

一般使用threadpoolexecutor來管理任務比直接宣告thread並呼叫更方便,且易於管理。

定義它有幾個常用設定:

邏輯關係這裡介紹queue僅做執行緒池任務佇列時的特性介紹,並不詳細介紹各種blockingqueue的其餘特性。

arrayblockingqueue

一般作為有界佇列儲存,當併發任務量巨大的時候,可以在一定程度上保護系統穩定性,較為常用。宣告時需要制定佇列的長度。

linkedblockingqueue

無界佇列,容量大,但是在在併發任務量巨大時,由於沒有數量限制,容易造成記憶體溢位等一系列問題。

threadpoolexecutor.abortpolicy()

直接放棄當前任務,會丟擲異常。

threadpoolexecutor.callerrunspolicy()

用於被拒絕任務的處理程式,它直接在 execute 方法的呼叫執行緒中執行被拒絕的任務;如果執行程式已關閉,則會丟棄該任務。所以如果executor沒有被關閉,任務會等待執行。如果executor被關閉,則會被丟棄。

threadpoolexecutor.discardoldestpolicy()

拋棄舊的任務

threadpoolexecutor.discardpolicy()

拋棄當前的任務

定時更新任務

這些任務一般不消耗太多系統資源,並且若上一任務掛起,新任務提交時,往往上一任務就不需要執行了。因此可以為這些任務分配乙個執行緒,1-2個佇列長度即可,拒絕異常處理選擇拋棄舊任務。

可能大量併發且必須完成的任務

這些任務需要分配較多的系統資源。執行緒數以及佇列長度的設定應該按實際使用場景判斷:

io負擔大的

應該多分配執行緒數量,減少佇列長度。

cpu負擔大的

應該分配較少執行緒數(具體數量依據cpu核心數確定),這樣可以減少上下文切換造成的效能損失,同時增加佇列長度。

拒絕異常處理應該選擇讓任務繼續等待執行緒池空閒,並加入任務佇列。

對於可能出現的任務失敗,或者系統異常導致的任務丟失,可以考慮結合佇列的持久化方法。並加入定時任務,掃瞄未被執行的任務並加入執行緒池任務佇列。

在web專案中一些需要注意的問題

現在已經做了比較長一段時間的 web專案了,很多人會覺得web專案的技術難度不是很大,我個人感覺這有幾方面的原因,乙個是目前的程式設計師是從事web專案的 包擴.net,php,j2ee 人比較多,而從事其他方面的人員相對要少一些,所以擱行如擱山,大多程式設計師有個很優秀的品質,對於不了解的東西回比...

jquery專案中一些比較常用的簡單方法

1 選擇器 這兩個都是選擇input中被選中的空間,但是在ie中 child input checked 有可能還會選中text控制項 child input checked child find input checked true if selectradio.length 0 選擇所有chec...

專案中一些結構體的使用總結

先宣告一點,在c 11下相同的結構體是可以直接賦值的,可以直接賦值的,可以直接賦值的 如下圖 有的時候在使用結構體的時候,如果資料過大,或者裡面資料型別過多,甚至賦值時候需要多種不同的地方賦值的時候,可以考慮,將結構體進行拆分,拆成多個不同的小結構體,對小結構體進行賦值後,再組裝到大結構體裡面。比如...