线程
现代操作系统提供了对单个进程中多条执行线索的支持,这些执行线索称为线程。线程是构成进程的可独立运行的单元,是进程内的一个执行流。
线程与进程的比较
- 在资源分配方面,进程是操作系统资源分配的基本单位。线程基本上不拥有自己的资源,只拥有一点在运行中必不可少的资源(如堆栈等)
- 在CPU调度方面,线程是调度执行的基本单位
- 在通信方面,由于多个线程共享同一内存地址空间,线程之间的通信犹如同一房间内的人之间的对话,因而更容易实现。
内核级线程和用户级线程
区别在于线程的调度实在核内还是核外进行的,用户级线程不需要内核支持,对线程的管理和调度完全由用户程序完成。内核级线程则是由内核完成对线程的管理和调度。
用户级线程的切换速度比内核级线程要快得多,但如果有一个用户级线程被阻塞,则内核会将整个进程置为等待态,使该进程内的其他线程也失去运行的机会。
内核级线程则没有这样的问题,一个线程被阻塞时,其他线程仍可调度运行,内核级线程也更利于并发使用多CPU资源。
linux中的线程
linux从内核的角度来说,并没有线程这个概念。
Linux称不独立拥有资源的进程为“轻量级进程”(LWP)
linux中实现多线程应用的策略是:为每个线程创建一个LWP进程,线程的调度由内核完成,线程的管理在核外函数库实现。
用clone()的系统调用来完成LWP进程的创建。