批量任務後台執行功能實現細節。

2021-10-04 08:27:52 字數 1715 閱讀 8229

將客戶端開啟、關閉、修改認證功能後台執行。

一、後台執行過程**現錯誤或者遇到系統重啟時自動修復。

二、自動修復未啟動前,提供提前修復按鈕。

四、前端展示進度。

五、自定義賬戶展示、恢復預設賬戶功能。

1、執行緒執行過程中或者出現執行錯誤時不能執行其他執行緒。(考慮優化為出現錯誤時,可以執行其他執行緒。)

2、執行緒執行過程中不能刪除客戶端。

3、執行緒執行過程中還沒處理的客戶端不能單獨操作認證。

實現:

執行緒開啟、關閉、修改時,在mon db中寫入任務執行狀態(operation_type: 0-開啟,1-關閉, 2-修改, status: running-執行中, end:執行遇到錯誤或者系統重啟。 end-running-後台修復執行緒執行中)、認證資訊以及所有的客戶端資訊、進度資訊,每處理乙個客戶端則刪除乙個客戶端,並更新進度。

每次處理乙個客戶將端的操作在客戶端少的時候不會對效能有影響,但是當客戶端達到1000左右時,寫入mon db的操作將是乙個比較耗時的操作。

1、執行緒開始後客戶端資訊、進度資訊不存入mon db,針對執行過程中客戶端是否已經被開啟和關閉是可以通過客戶端當前認證狀態獲取的,針對修改的情況,每次執行緒處理或者提前處理以後,將已經處理的客戶端儲存到記憶體中來達到判斷客戶端是否已經被修改。

2、進度資訊儲存在記憶體中,如果後台任務執行過程中遇到錯誤或者重啟,修復執行緒執行時進度重新計算,注意,修復執行緒執行時的進度為總客戶端數減去之前已經被提前處理的客戶端數。

優化方案優勢為能保證系統正常使用時不會出現操作mon db耗時的效能問題,劣勢為當後台修復執行緒執行**現重啟時,會將已經修改過的客戶端再次重複修改(因為重啟以後內存在記錄已經修改的客戶端資料已經不存在)。

當後台執行緒出現錯誤時,後台會有乙個5分鐘的定時執行緒嘗試自動修復,在修復執行緒沒有自動執行時,使用者客戶通過前端頁面提前修復。

後端提供修復介面,介面收到請求後則再次啟動乙個修復執行緒,這個修復執行緒執行結束則停止,不再定時執行。修復執行緒前需要判斷當前是否有正常執行緒以及修復執行緒已經在執行,如果已經在執行則不啟動執行緒。

修復執行緒起來時,需要將之前記錄的客戶端進度資訊清空,並將新的進度修改為總客戶端數減去提前修改的客戶端數,將提前處理的客戶端標記為已經處理進度,如果是修改操作將提前處理的客戶端標記為已經修改,如果檢查到之前已經被操作的客戶端,則重新更新進度,如果是提前操作的客戶端,修復執行緒執行到這個客戶端時,則不更新進度。

執行緒執行過程中,使用者想要提前修改後面的客戶端則可以執行提前操作。

操作每個客戶端都需加鎖,通過裝飾器實現,共享變數的修改需要在操作客戶端的方法內實現。

考慮到進度問題,需要將執行緒處理過或者提前處理的客戶端標記為已經已經處理進度,每次操作客戶端時,如果是檢查到已經操作,則判斷是否已經修改進度,如果沒有更新進度,則需要更新進度。(處理依據:當客戶端被提前處理時,執行緒執行到這個客戶端以後不需要更新客戶端,因為提前操作時已經更新,如果是執行緒出現失敗,則進度重新開啟,針對已經處理了進度的客戶端,需要判斷是否是之前的執行緒處理的還是此次修復執行緒執行過程中提前處理的客戶端,如果是之前執行緒處理的客戶端,則需要更新進度)

考慮到修復執行緒進度問題,需要將提前處理的客戶端記錄到mon db,修復執行緒啟動時的進度為總客戶端數減去提前處理客戶端數。

記憶體中儲存客戶端進度資料,如果遇到執行緒錯誤或者重啟則重新計算。

如果修改客戶端單向認證不是執行緒處理或者提前處理的,則將其標記為自定義認證客戶端,記錄到mon db,只有當刪除客戶端、關閉客戶端chap、恢復預設認證時將客戶端記錄清空。

Ios後台任務執行實現

首先你應該定義如下兩個變數 uibackgroundtaskidentifier m taskid 後台任務id bool m brun 是否有後台任務執行的標誌其次,你需要寫如下幾個函式,用來判斷和啟動後台任務 bool ismultitaskingsupported return bresult...

IOS 後台無限執行任務

今天看到這個分享,以後應該會用到,先記下來。首先需要配置info plist檔案,在裡面新建乙個required background modes。這個是乙個陣列,在下面新增如下內容 block uibackgroundtaskidentifier background task backgroun...

spawn plugin 後台執行任務外掛程式

後台 執行 任務 放在vendor plugins 目錄下 在config environment.rb中配置 config.active record.allow concurrency true def test spawn do sleep 11 12.times endrender acti...