4个30M的文件+一个100K的文件。客户端和服务器在同一机器上,同一form提交,没用Ajax。
单线程处理用时36秒,全部完成后forward到结果页面。
为每一个文件上传开新线程应该为5个文件5个线程,+主线程,共6个,用时49秒。我一直刷新文件管理器,发现文件大小同时在变,最后一个小文件在20秒时就结束了。程序在约20秒的时候forward到结果页面,这是后台线程还正忙着呢。
下面是我的分析:
结果很出乎意料,开了多线程,速度反而下降了,并从现象来看,确实是多线程工作,同事上传文件。究其原因,我觉得上传的瓶颈是在IO上开了多线程并没有提高IO,所以不会提高任何速度。
那为什么反而墁了?我认为可能多线程调度消耗了资源,IO的物理通道就一个,多线程其实是共享一个,那么为了公平起见,调度器就不断调度各个上传线程轮流上传,不断的开关连接,消耗大量资源。导致速度下降。
页面提前转过倒是一件好事,可以后台传文件,前台用户干别的事。
改进方案:
所有的文件只开一个线程,按他们的顺序传。
主线程在invoke上传线程后就forward到下一个页面。。。
欢迎提出你的宝贵意见,包括砖头:)
单线程处理用时36秒,全部完成后forward到结果页面。
为每一个文件上传开新线程应该为5个文件5个线程,+主线程,共6个,用时49秒。我一直刷新文件管理器,发现文件大小同时在变,最后一个小文件在20秒时就结束了。程序在约20秒的时候forward到结果页面,这是后台线程还正忙着呢。
下面是我的分析:
结果很出乎意料,开了多线程,速度反而下降了,并从现象来看,确实是多线程工作,同事上传文件。究其原因,我觉得上传的瓶颈是在IO上开了多线程并没有提高IO,所以不会提高任何速度。
那为什么反而墁了?我认为可能多线程调度消耗了资源,IO的物理通道就一个,多线程其实是共享一个,那么为了公平起见,调度器就不断调度各个上传线程轮流上传,不断的开关连接,消耗大量资源。导致速度下降。
页面提前转过倒是一件好事,可以后台传文件,前台用户干别的事。
改进方案:
所有的文件只开一个线程,按他们的顺序传。
主线程在invoke上传线程后就forward到下一个页面。。。
欢迎提出你的宝贵意见,包括砖头:)