一个关于NIO和传统线程池方式性能的比较问题~

时间:2021-11-13 19:53:49
我用NIO和线程池方式分别实现模拟100个用户下载一个大文件,然后计算每个用户下载的所需时间,但是我发现用传统的线程池方式实现的时间方面的性能远优于NIO方式的,这是为什么呢?不是应该是NIO方式的更优吗?应该如何去比较NIO和线程池方式的性能?恳请各位大侠多多指教!!

6 个解决方案

#1


你所说的时间方面的性能,是指单个用户下载的总时间吧?

传统IO的缺点在于,它需要为每个连接分配一个线程,这样在支持大并发时,会导致线程暴涨。

而NIO则可以用一个线程服务多个连接,这样能更好的支持大并发连接,但显然多个连接要分享这个线程的时间片。

所以要看场合,如果就100个并发,不算太大量。如果是5000并发呢?你说传统IO还顶得住不?

#2


哦哦,是每个用户下载完一个大文件所用的时间,那我用这个方法来比较这两种方式的性能优劣可行吗?

#3


各位大侠,帮帮忙~~~

#4


1楼说得对,你模拟5000个试试。

#5


引用 1 楼  的回复:
你所说的时间方面的性能,是指单个用户下载的总时间吧?

传统IO的缺点在于,它需要为每个连接分配一个线程,这样在支持大并发时,会导致线程暴涨。

而NIO则可以用一个线程服务多个连接,这样能更好的支持大并发连接,但显然多个连接要分享这个线程的时间片。

所以要看场合,如果就100个并发,不算太大量。如果是5000并发呢?你说传统IO还顶得住不?

1000以上基本就不行了   楼主看下 淘宝 boyan NIO trap and track

#6


引用 1 楼  的回复:
你所说的时间方面的性能,是指单个用户下载的总时间吧?

传统IO的缺点在于,它需要为每个连接分配一个线程,这样在支持大并发时,会导致线程暴涨。

而NIO则可以用一个线程服务多个连接,这样能更好的支持大并发连接,但显然多个连接要分享这个线程的时间片。

所以要看场合,如果就100个并发,不算太大量。如果是5000并发呢?你说传统IO还顶得住不?


楼上分析的对

#1


你所说的时间方面的性能,是指单个用户下载的总时间吧?

传统IO的缺点在于,它需要为每个连接分配一个线程,这样在支持大并发时,会导致线程暴涨。

而NIO则可以用一个线程服务多个连接,这样能更好的支持大并发连接,但显然多个连接要分享这个线程的时间片。

所以要看场合,如果就100个并发,不算太大量。如果是5000并发呢?你说传统IO还顶得住不?

#2


哦哦,是每个用户下载完一个大文件所用的时间,那我用这个方法来比较这两种方式的性能优劣可行吗?

#3


各位大侠,帮帮忙~~~

#4


1楼说得对,你模拟5000个试试。

#5


引用 1 楼  的回复:
你所说的时间方面的性能,是指单个用户下载的总时间吧?

传统IO的缺点在于,它需要为每个连接分配一个线程,这样在支持大并发时,会导致线程暴涨。

而NIO则可以用一个线程服务多个连接,这样能更好的支持大并发连接,但显然多个连接要分享这个线程的时间片。

所以要看场合,如果就100个并发,不算太大量。如果是5000并发呢?你说传统IO还顶得住不?

1000以上基本就不行了   楼主看下 淘宝 boyan NIO trap and track

#6


引用 1 楼  的回复:
你所说的时间方面的性能,是指单个用户下载的总时间吧?

传统IO的缺点在于,它需要为每个连接分配一个线程,这样在支持大并发时,会导致线程暴涨。

而NIO则可以用一个线程服务多个连接,这样能更好的支持大并发连接,但显然多个连接要分享这个线程的时间片。

所以要看场合,如果就100个并发,不算太大量。如果是5000并发呢?你说传统IO还顶得住不?


楼上分析的对