若是你的应用程序须要采起如下的操做,那么你尽可在编程的时候考虑多线程机制:
连续的操做,须要花费忍无可忍的过长时间才可能完成
并行计算
为了等待网络、文件系统、用户或其余I/O响应而耗费大量的执行时间
因此说,在动手以前,先保证本身的应用程序中是否出现了以上3种情形。程序员
为何须要多线程(解释什么时候考虑使用线程)
从用户的角度考虑,就是为了获得更好的系统服务;从程序自身的角度考虑,就是使目标任务可以尽量快的完成,更有效的利用系统资源。综合考虑,通常如下场合须要使用多线程:
一、 程序包含复杂的计算任务时
主要是利用多线程获取更多的CPU时间(资源)。
二、 处理速度较慢的外围设备
好比:打印时。再好比网络程序,涉及数据包的收发,时间因素不定。使用独立的线程处理这些任务,可以使程序无需专门等待结果。
三、 程序设计自身的须要
WINDOWS系统是基于消息循环的抢占式多任务系统,为使消息循环系统不至于阻塞,程序须要多个线程的来共同完成某些任务。编程
每一个正在系统上运行的程序都是一个进程。每一个进程包含一到多个线程。进程也多是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它能够在程序里独立执行。也能够把它理解为代码运行的上下文。因此线程基本上是轻量级的进程,它负责在单个程序里执行多任务。一般由操做系统负责多个线程的调度和执行。
什么是多线程?
多线程是为了使得多个线程并行的工做以完成多项任务,以提升系统的效率。线程是在同一时间须要完成多项任务的时候被实现的。
使用线程的好处有如下几点:
·使用线程能够把占据长时间的程序中的任务放到后台去处理
·用户界面能够更加吸引人,这样好比用户点击了一个按钮去触发某些事件的处理,能够弹出一个进度条来显示处理的进度
·程序的运行速度可能加快
·在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种状况下咱们能够释放一些珍贵的资源如内存占用等等。
还有其余不少使用多线程的好处,这里就不一一说明了。
一些线程模型的背景
咱们能够重点讨论一下在Win32环境中经常使用的一些模型。
·单线程模型
在这种线程模型中,一个进程中只能有一个线程,剩下的进程必须等待当前的线程执行完。这种模型的缺点在于系统完成一个很小的任务都必须占用很长的时间。
·块线程模型(单线程多块模型STA)
这种模型里,一个程序里可能会包含多个执行的线程。在这里,每一个线程被分为进程里一个单独的块。每一个进程能够含有多个块,能够共享多个块中的数据。程序规定了每一个块中线程的执行时间。全部的请求经过Windows消息队列进行串行化,这样保证了每一个时刻只能访问一个块,于是只有一个单独的进程能够在某一个时刻获得执行。这种模型比单线程模型的好处在于,能够响应同一时刻的多个用户请求的任务而不仅是单个用户请求。但它的性能还不是很好,由于它使用了串行化的线程模型,任务是一个接一个获得执行的。
·多线程块模型(自由线程块模型)
多线程块模型(MTA)在每一个进程里只有一个块而不是多个块。这单个块控制着多个线程而不是单个线程。这里不须要消息队列,由于全部的线程都是相同的块的一个部分,而且能够共享。这样的程序比单线程模型和STA的执行速度都要块,由于下降了系统的负载,于是能够优化来减小系统idle的时间。这些应用程序通常比较复杂,由于程序员必须提供线程同步以保证线程不会并发的请求相同的资源,于是致使竞争状况的发生。这里有必要提供一个锁机制。可是这样也许会致使系统死锁的发生。网络