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