轻松入门实战应用从项目开发角度为你搭建完整的知识体系 wangbaoming linux 线程-应用编程-专题讲座 written by 王保明 线程概念 1 线程概念 什么是线程 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列” 一切进程至少都有一个执行线程 进程与线程 进程是资源竞争的基本单位 线程是程序执行的最小单位 线程共享进程数据,但也拥有自己的一部分数据 线程ID 程序计数器 寄存器组 栈 errno 一个进程内部的线程可以共享资源 代码段 数据段 打开文件和信号 轻松入门实战应用从项目开发角度为你搭建完整的知识体系 w angbaoming fork 和创建新线程的区别 当一个进程执行一个fork 调用的时候,会创建出进程的一个新拷贝,新进程将拥有它自己的变量和它自己的PID。这个新进程的运行时间是独立的,它在执行时几乎完全独立于创建它的进程 在进程里面创建一个新线程的时候,新的执行线程会拥有自己的堆栈(因此也就有自己的局部变量),但要与它的创建者共享全局变量、文件描述符、信号处理器和当前的工作目录状态 线程的优点 创建一个新线程的代价要比创建一个新进程小得多 与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少很多 线程占用的资源要比进程少很多 能充分利用多处理器的可并行数量 在等待慢速 I/O 操作结束的同时,程序可执行其他的计算任务 计算密集型应用,为了能在多处理器系统上运行,将计算分解到多个线程中实现 轻松入门实战应用从项目开发角度为你搭建完整的知识体系 wangbaoming 2 线程模型 N :1 用户线程模型 “线程实现”建立在“进程控制”机制之上,由用户空间的程序库来管理。OS 内核完全不知道线程信息。这些线程称为用户空间线程。 这些线程都工作在“进程竞争范围” I/O 密集型应用,为了提高性能,将 I/O 操作重叠。线程可以同时等待不同的I/O 操作。 线程缺点 性能损失 一个很少被外部事件阻塞的计算密集型线程往往无法与共它线程共享同一个处理器。如果计算密集型线程的数量比可用的处理器多,那么可能会有较大的性能损失,这里的性能损失指的是增加了额外的同步和调度开销,而可用的资源不变。 健壮性降低 编写多线程需要更全面更深入的考虑,在一个多线程程序里,...