操作系统 - 线程

线程也称为轻量级的进程

要介绍线程,就必须先从进程存在的问题说起


一、进程存在的问题

进程切换很耗费时间

进程间调度切换时,很耗费计算机资源,即花费时间也耗费存储空间,
因为要为被切换的进程保留大量信息,以便该进程再次被调度时恢复

这个有点类似于函数调用,当 A 函数调用 B 函数时,
A 函数的断点地址、局部变量等都是要被保存起来的,等到从 B 函数返回时,
A 函数需要从断点地址重新继续运行,同时恢复 A 函数的局部变量,以便让 A 函数再次正常运行


二、线程 - 进程问题的解决

使用线程,更轻量的进程

(1)线程的优势

线程也叫轻量级的进程,相比进程来说,线程最大优势就是相互切换时,非常节省计算机资源,
至于为什么线程切换省事,这里不探究这个问题。

(2)线程很重要、很常见

不管实在c/c++/java/c#的程序开发中,都涉及线程的使用,所有这些线程的使用原理其实都是一样的,
只是涉及的语言不同而已,只要你会了其中某类线程的使用,其它类线程的使用都不成问题

如果学会了C语言的线程使用,学习c++和java的线程都很简单

(3)线程由谁提供

线程有两种提供方式,
1)第一种则由操作系统提供

2)第二种以线程库方式提供,独立于OS之外

比如:

  • Linux:两种方式都有,不过常见的都是以独立于OS之外的线程库来提供。
  • Win32:由OS提供

如果OS有提供线程,同时也有第三方线程库提供线程,你可以根据自己的选择来决定使用哪一个线程,
一般来说使用C、C++、JAVA编程时,线程都是由第三方库来实现的,
当然有些公司不满意别人提供的这个线程库的话,完全可以自己开发一个线程库

(4)与进程一样,线程也会参与调度

与进程一样,线程也有

就绪态、执行态、阻塞态等各种状态
线程也会参与调度器的调度,所以进程与线程一起并发运行的

(5)线程能够替代进程吗

不能!
虽然线程很好,但是线程只是弥补了进程的缺点,但是无法干掉进程,
因为线程是基于进程而存在,没有进程也无法无法实现


三、进程与线程关系

(1)线程基于进程资源工作

资源(cpu和内存)以进程为单位进程分配的,因此进程被称为“资源分配的最小单位”,线程基于进程的这些资源来工作的

(2)线程的切换

在进程中开辟多个线程后,进程内部的线程会共享进程资源,所以进程内的线程切换时,不涉及进程间的切换,
因此进程内部线程切换时,不会耗费太多计算机资源,因为不涉及费劲的进程间切换。

当然如果进程内部没有开辟多个线程的话,它就是单线程的,即当前进程可以被看作是一个单线程
这个进程就是这个单线程,这个单线程就是这个进程

(3)进程与线程各自的作用

1)程序运行起来后就变成了进程,OS以进程为单位分配cpu、内存等计算机资源

2)线程实现进程内部的多线任务
当进程内部有很多事情要并发进行时,比如在读取键盘数据的同时,又需要从网卡读取数据,
这个时候就可以在进程内部开辟两个线程,一个专门用于读取键盘数据,另一个专门用于从网卡读数据,
两个线程并发运行,各行其事,线程的时间片也是 ms 级的,宏观上表现是,两个线程是同时运行、同时做事的。

操作系统 - 线程