在连续打了几天的游戏、看了几天的小视频以及聊完了几个交友软件后,我又想开始学习了。这个社会诱惑太多。
概念
在学习线程的实现方式之前需要先了解几个概念
- 用户线程
- 内核线程
-
用户线程(UT)
用户线程是应用程序自己实现的一套线程管理的逻辑。所有的线程管理操作都是用户程序自己控制的。
从操作系统方面看:操作系统只提供了1条线程(内核线程)。这条线程不停的切换用户线程去使用这个操作系统提供的这条线程
- 用户空间可以认为是Java中的main()方法在运行,创建了好多Thread
- 内核空间看到这个运行的main()方法,就是一个进程
- 当CPU切换到这个进程,此进程就可以执行
-
内核线程(KLT)
内核线程是真正意义上的线程了,由操作系统内核负责管理
可以无需看用户空间部分
-
轻量级进程
轻量级进程是用户线程和内核线程之间的桥梁。是内核线程的高级接口
LWP由内核管理
- 一个应用程序对应一个进程,一个进程对应多个LWP
- 从操作系统角度:一个进程有多少个LWP就有多少个线程
- 从应用程序角度:1个LWP可以被多个线程公用
用户线程和内核线程三种关系
操作系统只认识内核线程,于是用户线程想要执行需要先转成内核线程,内核线程就给用户线程提供了一个同一的方式,就是让用户线程将自己打扮成LWP,这样就可以了。
因此,应用程序可能会每一个用户线程都作为LWP,或者所有的用户线程公用1个LWP,或者有一些用户线程用这个LWP,另一些用户线程用那一个LWP1:1
1个用户线程对应1个LWP