问题很简单。是一些基础的东西,对多线程的概念实在是不懂。1.多线程提高效率,这个效率提高再了哪里?CPU一同一时间片只能处理一个程序。说是节省在线程需要执行很长时间需要等待的时候。线程等待的过程难道不占用CPU吗?什么情况下需要线程等待?2.多线程执行单任务的有没有必要?比如多线程执行一个采集的方法。效率体现在那些步骤?

解决方案 »

  1.   

    多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。
      使用线程的好处有以下几点:
      ·使用线程可以把占据长时间的程序中的任务放到后台去处理
      ·用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度
      ·程序的运行速度可能加快
      ·在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下可以释放一些珍贵的资源如内存占用等等。
      还有其他很多使用多线程的好处,这里就不一一说明了。
      一些线程模型的背景
      可以重点讨论一下在Win32环境中常用的一些模型。
      ·单线程模型
      在这种线程模型中,一个进程中只能有一个线程,剩下的进程必须等待当前的线程执行完。这种模型的缺点在于系统完成一个很小的任务都必须占用很长的时间。
      ·块线程模型(单线程多块模型STA)
      这种模型里,一个程序里可能会包含多个执行的线程。在这里,每个线程被分为进程里一个单独的块。每个进程可以含有多个块,可以共享多个块中的数据。程序规定了每个块中线程的执行时间。所有的请求通过Windows消息队列进行串行化,这样保证了每个时刻只能访问一个块,因而只有一个单独的进程可以在某一个时刻得到执行。这种模型比单线程模型的好处在于,可以响应同一时刻的多个用户请求的任务而不只是单个用户请求。但它的性能还不是很好,因为它使用了串行化的线程模型,任务是一个接一个得到执行的。
      ·多线程块模型(自由线程块模型)
      多线程块模型(MTA)在每个进程里只有一个块而不是多个块。这单个块控制着多个线程而不是单个线程。这里不需要消息队列,因为所有的线程都是相同的块的一个部分,并且可以共享。这样的程序比单线程模型和STA的执行速度都要块,因为降低了系统的负载,因而可以优化来减少系统idle的时间。这些应用程序一般比较复杂,因为程序员必须提供线程同步以保证线程不会并发的请求相同的资源,因而导致竞争情况的发生。这里有必要提供一个锁机制。但是这样也许会导致系统死锁的发生。
      

  2.   

    楼主5点就起床上网了,真努力呀.
    1.多线程提高效率,这个效率提高再了哪里?CPU一同一时间片只能处理一个程序。说是节省在线程需要执行很长时间需要等待的时候。线程等待的过程难道不占用CPU吗?什么情况下需要线程等待? 
    答:可以充分利用CPU,不让CPU有闲的时候,这就提高了效率.况且现在有多核处理器和多CPU设备.如果只是单线程,那么你只能利用1个CPU工作;如果是多线程,可以利用多个cpu工作. 你说的线程等待是指主线程的等待,主线程有主线程的工作,并不是有了辅助线程,主线程就不工作了.主线程和辅助线程在同时工作. 实际中线程等待一般用在多个线程配合处理,例如:A线程运行到了某处,由于资源抢占或B线程处理完成才可以继续执行,这是线程A就处于等待状态了.2.多线程执行单任务的有没有必要?比如多线程执行一个采集的方法。效率体现在那些步骤? 
    什么叫单任务,不明白你说的东西?如果要对某个硬件进行数据采集,用多线程还是有优势的.简单的说:
    第一:可以避免主界面的假死.因为硬件的数据采集,频次比较高,主界面来不及处理其他消息,早成假死.
    第二:可以不间断(频次高)的,探测设备的状态或发送指令,保证设备采集数据的及时.
      

  3.   

    难道楼主没有看到现在遍地都是的多核 CPU 广告“CPU一同一时间片只能处理一个程序” 的时代已经一去不复返矣即使单核又如何,计算机系统里面还有大量的低速设备,例如硬盘,或者是你说的采集。难道你就想 CPU 整天在干等着这些家伙慢腾腾地干活?