操作系统在调度线程的时候,实际上为每个线程分配了很小的时间片,每个线程在各自的时间片执行,操作系统负责切换那举个例子:
需要打开5个Form窗口,每个窗口打开时,需要进行很多计算,因此,打开很慢
我想问:
如果使用单线程,一个一个的打开5个窗口
使用多线程,打开5个窗口总的运行时间,哪个更短?
我的理解是,总的运行时间一样多,多线程无非就是在多个线程之间切换来,切换去,看起来好像是同时进行,只是让用户感官上好一点,我的这种理解正确吗?

解决方案 »

  1.   

    (1)线程和线程的调度无关。.NET上的线程也未必由操作系统调度。
    (2)多线程是否能提高性能取决于它们对资源的使用情况。注意,这个资源未必是CPU资源。
      

  2.   

    每一个进程至少有一个主执行线程,它无需由用户去主动创建,是由系统自动创建的。用户根据需要在应用程序中创建其它线程,多个线程并发地运行于同一个进程中。一个进程中的所有线程都在该进程的虚拟地址空间中,共同使用这些虚拟地址空间、全局变量和系统资源,所以线程间的通讯非常方便,多线程技术的应用也较为广泛。多线程可以实现并行处理,避免了某项任务长时间占用CPU时间。要说明的一点是,目前大多数的计算机都是单处理器(CPU)的,为了运行所有这些线程,操作系统为每个独立线程安排一些CPU时间,操作系统以轮换方式向线程提供时间片,这就给人一种假象,好象这些线程都在同时运行。由此可见,如果两个非常活跃的线程为了抢夺对CPU的控制权,在线程切换时会消耗很多的CPU资源,反而会降低系统的性能。这一点在多线程编程时应该注意。Win32 SDK函数支持进行多线程的程序设计,并提供了操作系统原理中的各种同步、互斥和临界区等操作。Visual C++ 6.0中,使用MFC类库也实现了多线程的程序设计,使得多线程编程更加方便。
      

  3.   

    那是早期操作系统教材上介绍的,现在多核CPU可以做到真正的同步,但基础原理还是一样的,时间片
      

  4.   

    我上面说了,多线程可以更好地利用资源,从而提高性能。在单CPU系统中,多线程提高速度不是不可能,因为系统资源未必一定是CPU资源。一个典型的情况是,网络下载。当远程服务器连接迟缓,那么多个线程可以更好利用本地带宽资源,提高下载速度。
      

  5.   

    多线程是否可以提速要看你线程中的瓶颈在哪里,如果是因为某些等待导致长时间的不响应,是可以多线程的,如果是本身就利用大量cpu/IO那多线程就帮倒忙。例子不具有说服力,因为窗体启动慢有很多原因,比如某些窗体的启动时候要连接数据库,要连接网络,要检测系统硬件等,这些有大量的等待响应过程,是可以用多线程提速的,如果是控件过多,更新慢,多线程就没意义。
      

  6.   

    不是很有可能,是一定的...管理线程池、调度线程都要花时间和资源...好比一个程序1个人写要10天,10个人只用3天,看上去时间大大缩短了,实际上总时间是大大增加了...假如这个程序中的某个模块最多只能2个人写最少需要6天,那么10个人一起上很可能也要10天甚至更多...多线程只适用于CPU、IO等系统资源有空闲主线程多数运行时间处于空闲等待的可分拆任务...ps:Windows窗体本身就是多线程的,再用多线程开没有任何意义...界面“卡”100%是代码里有未优化的同步任务阻塞UI线程,跟一个一个打开还是一起打开蛋关系都没有...
      

  7.   

     
    不一定看它的机器配置,是几个cpu几个核的
      

  8.   

    本帖最后由 caozhy 于 2011-12-06 12:06:20 编辑
      

  9.   

     你这样说是没错,但是你别忽略了并行 运算,完美利用多核cpu才是王道
      

  10.   

    假设你的cpu是双核的那你开启的线程会平均分配到不同的核上进行运算,这样就可以大大提高了用户体验度。
      

  11.   


    并行运算和节约CPU时间有什么关系?vrhero说的都白说了?
      

  12.   

    是cpu运行时间没变,但是客户体验度变差了
    假设你是双核的你开2个线程进行运算,一个用时15秒
    你开一个线程运算一个用时20秒
    你说哪个对顾客的体验度高?
    我有说并行运算和节约cpu时间有关系?
    你怎么从来不看我说的啥呢?
      

  13.   

    顺便指正你一个问题,单cpu跟单核是两码事
      

  14.   

    时间与空间的问题 .这里说的空间是指CPU和内存的空间一个一个的打开并不会占用全部空间.一下五个的打开占用很多空间但同时进行速度就快很多了.
      

  15.   

    win32 系统下线程的切换是个相当耗费资源的活。大约是1000个左右。
    如果你的机子是多核的。如果你一直使用单线程。等于有一个cpu一直在空着。在进行服务器高并发处理时。推荐的线程数cpu个数*2。一般都是这样。