个人以为是为了提高CPU利用率。线程给操作系统带来的创建维护和管理负担要轻。因为与线程相关的信息比较少,交情的负担意味着线程的代价或开销比较少。当处理器除一个进程并激活另一个进程时,就要发生上下文切换。为了发生上下文切换,操作系统必须启动和重新启动每个进程所需的信息。这就意味着必须保存描述进程存在状态的有关信息,在进程再次激活时,就可以从离开的地点继续执行。那么系统在进程切换时需要保存那些信息呢?下面一一列举:
1、所需信息包括可执行程序、堆栈、以及静态与动态分配变量内存的指针。
2、寄存器组中包含执行下一条指令的指针这样的信息 。
3、重新任命进程时需要进程的状态(进程是被挂起还是被阻塞)和优先权。同时程序的I/O状态也被保存。
4、保存进程的规划信息,内存管理信息以及计数信息。
5、进程需要文件描述器和读写指针来继续使用资源。
而线程同样需要上下文。当线程被抢先时同样也会发生上下文切换。
与进程相比线程的优势如下:
1、线程不需要地址空间。线程包含在进程的地址空间中。(所以在重新任命进程时所需的线程都不需要)
2、线程的上下文只包含一个堆栈、一个寄存器组和一个优先权。
3、寄存器组包含程序或指令指针以及堆栈指针。
4、线程的文本包含在他的进程的文本中。
5、进程拥有的所有资源都属于线程。所以与资源相关的所有信息不是线程上下文的部分。
6、其他信息如规划、计数等都是由进程所定义。无需包含在线程的上下文中。
线程与进程的相同之处是:都有ID,寄存器组、状态、以及优先权。线程与子进程共享父进程的资源。
他们的不同之处是:
1、线程没有自己的地址空间,如果进程创建了多个所有的线程都将包含在他的地址空间中。
2、父进程和子进程之间必须通过进程间通信机制来进行通信。而进程中的多个线程之间是通过读取和写入数据到进程变量来通信。
3、子进程对其他子进程不施加控制,而进程的线程被看做同位体(peer)并对进程的其他的线程施加控制。