1.1.2.3.改进程序结构
许多应用程序都以更有效的方式构造为多个独立或半独立的执行单元,而非整块的单
个线程。多线程程序比单线程程序更能适应用户需求的变化。
占用较少的系统资源
如果两个或多个进程通过共享内存访问公用数据,则使用这些进程的程序可以实现对
多个线程的控制。但是,每个进程都有一个完整的地址空间和操作环境状态。每个进程用
于创建和维护大量状态信息的成本,与一个线程相比,无论是在时间上还是空间上代价都
更高。
此外,进程间所固有的独立性使得程序员需要花费很多精力来处理不同进程间线程的
通信或者同步这些线程的操作。
1.1.2.5.结合线程和 RPC(远程过程调用)
通过将多个线程和一个远程过程调用#,'#)#%%-#.#结合起来,可以充分
利用无共享内存的多处理器(如工作站集合)。这种结合将工作站集合视为一个多处理器,
从而使应用程序的分布变得相对容易些。例如,一个线程可以创建多个子线程,每个子线
程随后可以请求远程过程调用,从而调用另一个工作站上的过程。尽管初始线程此时仅创
建了一些并行运行的线程,但是这种并行性会涉及到其他计算机。
1.1.3.线程实现原理
在最初的 * ! 系统是没有线程这个概念的,后来实现线程的时候大致分成两种实现方
式:一种基于内核的线程实现-也称重量级线程;另外一种基于 / 函数实现,成为轻量级
线程。
线程实现的原理最基本的就是 * 资源调度的实现。
创建一个进程时,它的第一个线程称为主线程('&#),由系统自动生成。
然后可以由这个主线程生成额外的线程,而这些线程,又可以生成更多的线程。在运行一
个多线程的程序时,从表面上看,这些线程似乎在同时运行。而实际情况并非如此,为了
运行所有的这些线程,操作系统为每个独立线程安排一些 * 时间。单 * 操作系统以轮
转方式向线程提供时间片(0) )'),每个线程在使用完时间片后交出控制,系统再将#
* 时间片分配给下一个线程。由于每个时间片足够的短,这样就给人一种假象,好像这
些线程在同时运行。创建额外线程的唯一目的就是尽可能地利用 * 时间。