线程基础知识

基本概念

线程(thread)是系统调度分配的最小单位。与进程相比,线程没有独立的地址空间,多个线程共享一段地址空间,因此线程消耗更少的内存资源,线程间通信也更为方便,有时线程也被称为轻量级的进程(Light Weight Process,LWP

进程作为系统调度分配单位时存在的弊端

进程是资源拥有者,使用独立的地址空间,当系统中切换资源时,内存中进程的数据段、代码段、以及堆栈都要被切换(进程上下文切换),这种情况下无论是时间消耗和空间消耗都相当大。操作系统允许多进程并行执行,进程较为庞大,多进程占用的空间(内存)相当客观,满足大负载需要更大的内存。为了解决以上问题,诞生线程,更小的调度单位。

线程的机制

linux系统中线程借助进程机制实现,线程与进程联系密切,进程可以蜕变为线程。当在一个进程中创建一个线程时,原有的进程就会变成线程,两个线程更有一段地址空间;线程又被称为轻量级进程,线程 TCB(Thread Control Block,线程控制块)与进程 PCB相同,因此也可以 TCB视为PCB;对内核而言,线程和进程没有区别,CPU会为每个线程与进程分配时间片,并通过PCB来调度不同的线程和进程。

linux系统中的线程分为三种:

内核线程

内核线程是内核的分支,每个内核线程可处理一项特定操作。

用户线程(协程)

用户线程完全是建立在用户空间的线程,用户线程的是完全建立在用户空间的线程,用户线程的创建,调度,销毁 操作都在用户空间未完成,是一种低消耗的,高效率的线程。

轻量级线程(LWP

一种用户线程,同时也是内核线程的高级抽象,每一个轻量级线程都需要一个内核线程的支持,轻量级线程和内核线程及CPU之间的关系如图

相关参考

https://wiki.swoole.com/#/coroutine