上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.4 Linux线程
线程与进程类似,线程能够让应用程序更好地并发执行多个任务,也是Linux最小的任务执行单位。程序中的所有线程均可以独立执行,多个线程直接共享同一个全局内存区域,其中包括初始化数据段(Initialized Data)、未初始化数据段(Uninitialized Data),以及堆内存段(Heap Segment)。
线程之间能够方便快速地共享信息。一个线程只需将数据复制到共享(全局内存或堆)变量中,其他线程就能够直接访问到当前线程存储的信息。同时,创建线程要比创建进程快很多,甚至要快10倍以上。线程的创建之所以较快,是因为调用fork函数创建子进程时所需复制的诸多属性,在线程间的内存中本来就是共享的,所以无须采用写时复制来同步父进程的相关信息。
线程之间共享同一个进程的相关数据,从而能更好地让其他线程感知到公共资源的变化。具体包括以下数据:进程ID(process ID)、父进程ID、进程组ID、信号(signal)通知、控制终端、文件描述符等。同时每个线程都拥有一些特殊信息,方便进程对线程的管理,例如线程ID、信号掩码、线程特有数据、线程的实时调度策略(real-time scheduling policy)等。