分类: LINUX
2010-01-19 11:47:13
线程是可执行代码的可分派单元。这个名称来源于“执行的线索”的概念。在基于线程的多任务的环境中,所有进程有至少一个线程,但是它们可以具有多个 任务。这意味着单个程序可以并发执行两个或者多个任务。例如,文本编辑器可以在打印文本的同时格式化文本,只要这两个动作是被两个独立的线程执行。基于进 程的多任务与基于线程的多任务之间的区别可以归纳如下:基于进程的多任务处理程序的并发执行,基于线程的多任务处理相同程序的不同片断的并发执行。
在前面的讨论中,需要明确:只有在多CPU的系统中,才可能有真正的并发执行,在那里每个进程或者线程可以不受限制地访问CPU。对于单个CPU的 系统(在当前使用的系统中,这是主流),仅能够在表面上做到并发执行。在单个CPU的系统中,每个进程或者线程都接收一部分CPU时间,时间的数量由几个 因素来确定,包括进程或线程的优先级。尽管大多数计算机并没有真正意义上的并发执行,但是在编写多线程应用程序的时候,您应该假定它确实有并发能力。这是 因为您不能够知道单个线程执行的确切顺序,或者它们是否能够按照相同的顺序执行两次。因此,最好假定程序确实是在并发执行。
多线程对程序结构的改变
多线程改变了程序的基本结构。不同于按照严格的线性方式执行的单线程程序,多线程程序并发地执行它自身的各个部分。这样,所有的多线程程序都包含了相似的元素。因此,多线程程序的主要问题是管理线程之间的交互。
如前所述,所有的进程都至少包含一个执行线程,称之为主线程。主线程在程序开始时创建。在多线程程序中,主线程创建一个或者多个子线程。因此,每个 多线程的进程都以一个执行线程开始,然后创建一个或者多个附加的线程。在设计合理的程序中,每个线程都代表一个逻辑上独立的活动单元。
多线程的主要优点是可以让您编写非常高效的程序,因为它使得您可以利用大多数程序都具有的空闲时间。大多数的I/O设备,无论是网络端口、磁盘驱动 器还是键盘,速度都比CPU慢很多。通常,程序将主要的执行时间都花费在等待接收或者发送数据上。通过谨慎地使用多线程,您的程序可以在空闲的时候执行另 一个任务。例如,当程序的一部分通过Internet发送文件时,另一个部分可以读取键盘的输入,还有一个部分可以将下一步要发送的数据块缓存。