我的看法是这样的:关于多线程提高带宽的利用率,我觉得原因可能是这样的。它所提高的并不是单纯的网络带宽的利用率,而是针对服务器而言。假如一个服务器最多可以实现10个线程(或进程),那么如果你用5个线程与它建立连接,你就占用了服务器时间片的1/2,这样,这个服务器程序有一半的时间为你服务,另一半的时间为其他的连接服务。对于Client to Server来说,多线程应该是抢占Server服务资源的好办法,但是对于Client to Client来说就没有什么太大意义了。 其实基本思想跟masterz的意思是一样的,只是阐述的角度不同。请指教。 ;)关于线程多少问题,线程的多少只受内存大小的影响。至于性能嘛,就不知道了。有经验的高手请多多指教。
my cpu c500 memory 128MI test my computer can run 5000-7000 threads. but it run very slow.
非也非也。因为你只有一个CPU,所以某一时刻只有一个线程在工作。使用多线程的意思主要在于充分利用资源。比如说线程A在从硬盘读取数据,那么线程B就可以在这个时候利用CPU进行某些运算。如此而已。效率达不到20倍。
线程增加的目的是为了充分利用带宽,因为通信的速度瓶颈是网络应答和数据的传输。希望大家都来发表意见,我明天继续加分。
访问http://168.168.18.11:81/etechbase/advsearch.php将您的问题输入查询内容框,选择不同的精确程度,即可以找到你所需要的答案。效果还是可以的。
访问http://168.168.18.11:81/etechbase/advsearch.php将您的问题输入查询内容框,选择不同的精确程度,即可以找到你所需要的答案。效果还是可以的。
其实基本思想跟masterz的意思是一样的,只是阐述的角度不同。请指教。 ;)关于线程多少问题,线程的多少只受内存大小的影响。至于性能嘛,就不知道了。有经验的高手请多多指教。
but it run very slow.
但是每个线程组的进度还是有差异的。
如果象robber(海盗)那样做,光线程的请求,切换,管理就要占用大量的资源,
还是一个度的问题。
不管是服务器还是单机,适当的线程都可以起到充分利用cpu和带宽的目的,
好象一个房间,要求50个人进入,跑到房间尽头并返回,如果门很小,每次只够一个人进入,那么50个人依次轮流跑,大量的时间都用来等待了,如果门(cpu的线程处理能力,带宽)够宽,50个人同时进入,时间就节约了。
多谢提供实际数据。 ;)
关于线程进度的差异,我觉得是由于操作系统调度的问题。在MS的平台下,线程调度是基于抢占式的,所以有差异。分配的时间片不是相同的。但在类UNIX系统中,使用的是轮讯的调度方法,所以你会看到分配给每个线程的时间是相等的。关于效率问题。我还是想讨论一下。不论什么样的程序,完成任务(使用CPU计算)的时间都是相等的。如果要实现carmon举的门的例子,除非是50个CPU和50条物理链路同时使用。这才是“门够宽”。如果是一台机器的话,完成所有任务的时间不可能节约。只是最后一个任务(如果排号的话)的完成时间比轮着来可能会提早,但是必定有其它任务的完成时间推迟。举例说明:如果50个程序执行的都是传输1K数据的任务,网络带宽为10K,按照carmon的例子就是同时进入,但是,数据可以同时传输吗?不能!第一个线程首先使用带宽的话,它将占用所有带宽,也就是它在1/10秒就能完成任务,然后其它的线程开始占用带宽,每次每个线程占用的都是网络的全部带宽。也就是完成所有任务必需要(1/10)*50=5秒这与50×1/10=5秒是一样的。时间是不能被节约的。节约的是什么呢?是CPU的处理能力。CPU完成程序的计算根本不要1/10秒,等待网络传输的时间是一种浪费,这些时间用来处理别的线程就提高了CPU的利用率,提高了效率。本人的一点拙见,请高人指点。谢谢! ;)