Java 为什么线程池执行器中的线程上的请求之间存在延迟?
我同时运行批处理请求(50+),并在这样的循环中执行它们Java 为什么线程池执行器中的线程上的请求之间存在延迟?,java,android,multithreading,threadpool,threadpoolexecutor,Java,Android,Multithreading,Threadpool,Threadpoolexecutor,我同时运行批处理请求(50+),并在这样的循环中执行它们 for(AsyncTask task : myTasks){ task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR) } 当时我检查了我的网络档案器,发现它是这样的: 为什么在将新任务从队列添加到线程时,请求之间会有这种延迟(用红色标记)?由于您使用的是线程池,如果您试图执行的线程超出了线程池的处理能力,则一定会有延迟。@aran Yes,但是,为什么从队列中获取任务到在已
for(AsyncTask task : myTasks){
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)
}
当时我检查了我的网络档案器,发现它是这样的:
为什么在将新任务从队列添加到
线程时,请求之间会有这种延迟(用红色标记)?由于您使用的是线程池,如果您试图执行的线程超出了线程池的处理能力,则一定会有延迟。@aran Yes,但是,为什么从队列中获取任务到在已完成上一个任务的线程上运行任务的延迟如此之大(以秒为单位)任务时间大约为1.5s,但延迟似乎要大得多(至少4+秒)。对于线程池的延迟参数来说,4秒似乎太多了(不记得实际名称)。似乎很奇怪..也许您的AsyncTask
实现正在消耗这些时间。另外,我强烈建议使用比AsyncTask
更现代的工具:LiveData
、Kotlin协同程序或RxJava。如果可能,您可以尝试直接使用您的私有执行器
,进行网络I/O和相关处理。如果这解决了问题,那么延迟就在AsyncTask
本身的某个地方,可能与它如何更新主应用程序线程有关。但是,如果您看到普通的执行器也有同样的问题,那么我怀疑您能做多少,因为这个问题要么与您如何度量这个问题有关,要么与线程的调度方式有关,等等。当您使用一个线程池时,如果您试图执行的线程超过池的处理能力,那么一定会有延迟。@aran是的,但是,为什么从队列中获取任务到在已完成上一个任务的线程上运行任务的延迟如此之大(以秒为单位)任务时间大约为1.5s,但延迟似乎要大得多(至少4+秒)。对于线程池的延迟参数来说,4秒似乎太多了(不记得实际名称)。似乎很奇怪..也许您的AsyncTask
实现正在消耗这些时间。另外,我强烈建议使用比AsyncTask
更现代的工具:LiveData
、Kotlin协同程序或RxJava。如果可能,您可以尝试直接使用您的私有执行器
,进行网络I/O和相关处理。如果这解决了问题,那么延迟就在AsyncTask
本身的某个地方,可能与它如何更新主应用程序线程有关。但是,如果您看到普通的执行器也存在同样的问题,那么我怀疑您是否可以对此做很多工作,因为问题要么与您是如何衡量这一点的,要么与线程的调度方式有关,等等。