687-轻量级的进程---线程

轻量级的进程—线程

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

(1)进程存在的问题:进程切换很耗费时间
进程间调度切换时,很耗费计算机资源,即花费时间(切换的过程中CPU帮你去执行切换的过程)也耗费存储空间,因为要为被切换的进程保留大量信息,以便该进程再次被调度时恢复。
这个有点类似于函数调用,当A函数调用B函数时,A函数的断点地址、局部变量等都是要被保存起来的,等到从B函数返回时,
A函数需要从断点地址重新继续运行,同时恢复A函数的局部变量,以便让A函数再次正常运行。

(2)进程问题的解决:线程
(a)线程的优势
线程也叫轻量级的进程,相比进程来说,线程最大优势就是相互切换时,非常节省计算机资源,至于为什么线程切换省事,这里不探究这个问题。
(b)线程很重要、很常见
不管实在c/c++/java/c#的程序开发中,都涉及线程的使用,所有这些线程的使用原理其实都是一样的,只是涉及的语言不同而已,只要你会了其中某类线程的使用,其它类线程的使用都不成问题。

(3)线程由谁提供
线程有两种提供方式,第一种则由操作系统提供,第二种以线程库方式提供,独立于OS之外。比如:
(a)Linux:两种方式都有,不过常见的都是以独立于OS之外的线程库来提供。
(b)Win32:由OS提供
如果OS有提供线程,同时也有第三方线程库提供线程,你可以根据自己的选择来决定使用哪一个线程,一般来说使用C、C++、JAVA编程时,线程都是由第三方库来实现的,当然有些公司不满意别人提供的这个线程库的话,完全可以自己开发一个线程库。

(4)与进程一样,线程也会参与调度
与进程一样,线程也有就绪态/执行态/阻塞态等各种状态,线程也会参与调度器的调度,所以进程与线程一起并发运行的。

(5)线程能够替代进程吗
(a)不能
虽然线程很好,但是线程只是弥补了进程的缺点,但是无法干掉进程,因为线程是基于进程而存在,没有进程也无法无法实现。
(b)进程与线程关系
线程基于进程资源工作
资源(cpu和内存)以进程为单位进程分配的,因此进程被称为资源分配的最小单位,线程基于进程的这些资源来工作的。
线程的切换在进程中开辟多个线程后,进程内部的线程会共享进程资源,所以进程内的线程切换时,不涉及进程间的切换,因此进程内部线程切换时,不会耗费太多计算机资源,因为不涉及费劲的进程间切换。

情况如下所示:
当然如果进程内部没有开辟多个线程的话,它就是单线程的,即当前进程可以被看作是一个单线程。
· 进程与线程各自的作用

  • 程序运行起来后就变成了进程,OS以进程为单位分配cpu、内存等计算机资源。
  • 线程实现进程内部的多线任务
    当进程内部有很多事情要并发进行时,比如在读取键盘数据的同时,又需要从网卡读取数据,这个时候就可以在进程内部开辟两个线程,一个专门用于读取键盘数据,另一个专门用于从网卡读数据,两个线程并发运行,各行其事,线程的时间片也是ms级的,宏观上表现是,两个线程是同时运行、同时做事的。

(7)进程和线程关系类比
图:类比图
OS内核的进程管理介绍完了。
687-轻量级的进程---线程_第1张图片
687-轻量级的进程---线程_第2张图片

你可能感兴趣的:(操作系统和计算机网络,linux,线程)