程序员的自我修养 -- 基础知识笔记(二)

线程

轻量级进程(Lightweight Process, LWP)是程序执行流的最小单元。一个标准的线程由线程ID、当前指令指针(PC)、寄存器集合和堆栈组成。通常意义上,一个进程由一个到多个线程组成,各个线程之间共享程序的内存空间(包括代码段、数据段、堆等)以及一些进程级的资源(如打开文件和信号)。

                                                 程序员的自我修养 -- 基础知识笔记(二)

线程的访问十分自由,可以访问进程内存里的所有数据,包括其他线程的堆栈,并且在实际运行中线程也有自己的私有存储空间。包括栈、线程局部存储(Thread Local Storage, TLS)、寄存器。

线程间的私有与共享
线程私有 线程间的共享(进程所有)

局部变量

函数的参数

TLS数据

全局变量

堆上的数据

函数里的静态变量

程序代码,任何线程都有权利读取并执行任何代码

打开的文件,A进程打开的文件可以由B线程读写

 

线程调度:是指不断的在处理器上切换不用的线程的行为。线程一般的三种状态:

运行(Running): 此时线程正在执行。

就绪(Ready):此时线程可以立刻运行,单CPU已经被占用。

等待(Waiting):此时线程正在等待某一事件(通常是I/O或同步)发生,无法执行。

时间片是指处于执行中线程拥有一段可以执行的时间。时间片用尽的时候,该进程将进入就绪状态。

线程调度一般采用了优先级调度(Priority Schedule)和轮转法(Round Robin)。其中轮转法是指让各个线程轮流执行一小段时间方法(如下图),这个决定了线程之间交错执行的特点。优先级调度是指按照线程拥有的线程优先级(Thread Priority)排序,优先级高的先执行,这决定了线程按什么顺序轮流执行。

                                                  程序员的自我修养 -- 基础知识笔记(二)

IO密集型线程(IO Bound Thread):一般是指需要频繁等待的线程;

CPU密集型线程(CPU Bound Thread):一般是指很少等待的线程;

线程优先级改变的三种方式:

  1. 用户指定优先级
  2. 根据进入等待状态的频繁程度提升或降低优先级
  3. 长时间得不到执行而被提升优先级