线程相对于进程的优势


fork是昂贵的。fork要把父进程的内存映像拷贝到子进程,并在子进程中复制所有描述字,如此等等。当今的实现使用称为写时拷贝(copy on write)的技术,用以避免在子进程切实需要自己的拷贝之前把父进程的数据空间拷贝到子进程。然而,即便有这样的优化措施,fork仍然是昂贵的。

fork返回之后父子进程之间信息的传递需要进程间通信(IPC)机制。调用fork之前父进程向尚未存在的子进程传递信息相当容易,因为子进程将从父进程数据空间及所有描述字的一个拷贝开始运行。然而从子进程往父进程返回信息却比较费力。


线程有助于解决这两个问题。线程提供一种并发能力,可以在一个进程中的同一时刻运行多个流。每个线程都有自己的硬件寄存器和堆栈。一个进程中的所有线程共享全部虚拟空间地址、所有文件描述、信号行为和其他的进程资源。
线程有时称为轻权进程(light weight process),因为线程比进程“权重轻些”。也就是说线程的创建可能比进程的创建快10~100倍。

同一进程内的所有线程共享相同的全局内存。这使得线程之间易于共享信息,然而伴随这样的简易性而来的却是同步(synchronization)问题。


同一进程内的所有线程共享的:
全局变量
进程指令
大多数数据
打开的文件(即描述字)
信号处理函数和信号处置
当前工作目录
用户ID和组ID

每个线程各自的:
线程ID
寄存器集合,包括程序计数器和栈指针
栈(用于存放局部变量和返回地址)
errno


你可能感兴趣的:(优化,工作)