一个开发者的疑问:
应用程序会调用TOP的API去执行任务,首先根据单个任务执行时间很长,其次在用户量增加的时候线程并发量很大,出现连接重置等网络问题。
回答:
1.合理切割任务,将任务粒度放小,减小事务时间,提高事务执行成功率,降低回滚代价。
2.合并任务中重复的内容,在时间间隔容许的范围内,减少可能重复的操作。
3.看是否有批量操作接口,减少单个循环调用次数。
4.控制工作线程池线程个数,根据实际性能和对方服务器处理能力设置并行任务个数。
第四点在说明一下:
线程并发开的越多未必成功率越高:
首先本地资源有限(开的越多线程,本地GC回收频率越高,影响执行速度,效率反而降低)
其次,对方可能会由于你的ip连接数过多主动拒绝连接。(DOS保护)
再次,信道无法复用。(当前1.6JDK版本已经能够较好的复用TCP信道,并发瞬间开大量的TCP信道本身就是一种损耗,有时候部分串行化,某种程度上会减少产生TCP信道的数目合理利用信道,提高效率和成功率,客户端做好流控也很重要。)