一個開發者的疑問:
應用程序會調用TOP的API去執行任務,首先根據單個任務執行時間很長,其次在用戶量增加的時候線程并發量很大,出現連接重置等網絡問題。
回答:
1.合理切割任務,將任務粒度放小,減小事務時間,提高事務執行成功率,降低回滾代價。
2.合并任務中重復的內容,在時間間隔容許的范圍內,減少可能重復的操作。
3.看是否有批量操作接口,減少單個循環調用次數。
4.控制工作線程池線程個數,根據實際性能和對方服務器處理能力設置并行任務個數。
第四點在說明一下:
線程并發開的越多未必成功率越高:
首先本地資源有限(開的越多線程,本地GC回收頻率越高,影響執行速度,效率反而降低)
其次,對方可能會由于你的ip連接數過多主動拒絕連接。(DOS保護)
再次,信道無法復用。(當前1.6JDK版本已經能夠較好的復用TCP信道,并發瞬間開大量的TCP信道本身就是一種損耗,有時候部分串行化,某種程度上會減少產生TCP信道的數目合理利用信道,提高效率和成功率,客戶端做好流控也很重要。)