线程的概念
线程是操作系统资源的一种,是操作系统中能独立运行的基本单元,因此也是系统调度和分配的基本单位。
在线程内执行的代码只在它的上下文中起作用,因此有些地方使用执行上下文来代替线程。
线程有两个基本的类型:
用户级线程:
用户级线程内核的切换是由用户态程序自己控制,不用内核干涉,少了进出内核态的消耗。典型的例子为Linux中的pthread。
内核级线程:
内核级线程是指线程的切换由内核控制,当线程执行时由用户态转换为内核态,放弃时间片或者时间耗尽后又由内核态转换为用户态。比如windows的线程。
线程的状态及状态变化
线程有 新建、就绪、运行、阻塞、挂起、死亡几种状态。
他们之间主要的状态切换有:
1)创建线程
当创建一个新的进程时,也创建一个新的线程,进程中的线程可以在同一进程中创建新的线程中创建新的线程。
2)终止线程
可以正常终止自己,也可能某个线程执行错误,由其它线程强行终止。终止线程操作主要负责释放线程占有的寄存器和栈
3)阻塞线程
当线程等待每个事件无法运行时,停止其运行。
4)唤醒线程
当阻塞线程的事件发生时,将被阻塞的线程状态置为就绪态,将其挂到就绪队列。进程仍然具有与执行相关的状态。例如,所谓进程处于“执行”状态,实际上是指该进程中的某线程正在执行。对进程施加的与进程状态有关的操作,也对其线程起作用。例如,把某个进程挂起时,该进程中的所有线程也都被挂起,激活也是同样。