关于这方面一直有个问题没想明白,希望指教:操作系统分配时间片是以什么为单位?线程还是进程,如果是进程,好像通过多线程提高速度就没有意思了吧,因为再多的线程,它们总的时间片是相同的,但如果是线程,通过提高线程的优先级使操作系统为这个线程分配更多的时间片不就行了吗?为什么要通过增加线程个数这种通过改变“量”的办法来提高速度,而不使用前者改变“质”的办法呢?
注:我说的这种是在多个线程的运行目的都是一样的情况下,比如都是用来计算一批数据的,并且这些数据的计算结果对于计算没有影响。因此,我觉得多线程的提出并不是为了提高速度,而是为了能多个没有关联的任务同时进行。
胡说一气,还望指教

解决方案 »

  1.   

    Scheduling 是在Thread Level (线程),不是在Process上 (Linux好像是后者吧)。多线程还有个很重要的目的是可以同时干很多事情,比如打印的时候我还可以编辑我的文件,从这个角度上来讲我的编辑任务效率就高了。
      

  2.   

    “多线程能提高任务的速度”是针对特定应用来讲的,比如一个服务需要同时提供多个并行服务,还有比如某些计算任务不需要顺序执行等。当然针对同一个任务,对于同一cpu来讲,并不能提高速度。注意只是说“能”,并不是说“一定”。
      

  3.   

    还是能的,即使是单CPU,同样的优先级下。系统调度的单位是线程,不是进程。在你的程序里边恰当的把一个大任务分配到几个线程中处理。这样的来说,你的程序得到的运行机会就多了。因为在系统总的线程数里边,你的线程数量占的比例大了。分给你的时间片就多了。不过要注意的是恰当。
      

  4.   

    通过增加线程的数目增加得到处理的时间那还不如提高线程的优先级获得更多的处理时间,这样还能减少CPU进行线程切换的开销
      

  5.   

    别的不说,如果没有多线程,就没有图形界面,就没有鼠标。很多线程都需要一个等待的过程,这时候也是占用cpu资源的,多线程的一个重要目的是为不浪费那些等待的时间。
      

  6.   

    回 hzcpig() ( ) 
    你回答的意思我知道,但没理解我的意思,请仔细看一下我的 注
      

  7.   

    red_berries(我再顶顶) 
    通过增加线程的数目增加得到处理的时间那还不如提高线程的优先级获得更多的处理时间,这样还能减少CPU进行线程切换的开销
    ------------------------------------------------------------------------------------线程优先级不能乱改的,你要取得更多系统资源,也要使用正常手段。你说哪本书上告诉你写程序要靠提高优先级的。有几个软件靠提高优先级来提高效率的???一般都怕过分占用影响系统运行,采用了空闲处理的。你要知道,如果一个大任务的话,就一个线程执行的话,相对将任务合理划分到子线程处理,所得到的效率是有很大差别的。一个线程,
                                             
    ---网络数据接收----解析处理----分类-----存储------可视化显示你这样一个大循环执行效率是可想而知的。都什么都处理完了才去取数据,如果是UDP通信的话,可能不知道丢了多少数据包。多个线程:
                                                                    ----存储线程(可选)
    ----->网络接收线程----数据缓冲------数据解析线程-------数据缓冲
                                                                    ----可视化线程各个线程协作,相对来说取得的时间片也多了,而且对系统的影响也比那个提高优先级的好得太多。