网络编程Day1-进程线程概念

前言

网络编程很重要,在实际开发环境中,很多地方会用到, 举个例子,当我们的爬虫速率太慢了,我们可以开多进程多线程进行爬取;遇到 I/O 密集型任务,我们可以采用多线程处理。

今天介绍的进程线程是理论基础,应该熟练掌握。不熟悉进程线程概念的同学,认真理清其中的区别噢~


操作系统

还记得我们之前说过的操作系统基础吗?今天排上用场了~ 忘记的童鞋可以点击下方链接看一下:

计算机基础知识之操作系统

操作系统是一个用来协调、管理和控制计算机硬件和软件资源的系统程序,其中包括:文件系统、内存管理、设备管理和进程管理。它位于硬件和应用程序之间。

简单来说,操作系统是存在于用户与程序之间的”中间商”,我们负责下令调度,它负责具体工作的实现。



程序?进程?

我们知道,每一个软件都是由一串串代码构造出来的,而在我们电脑磁盘中,任何文件类型都只能以二进制存储。

那么,以一堆代码以文本形式存入一个文档,我们把这么一个二进制文件叫做程序。当我们运行这个程序时,就会读取到内存,再用相应的解释器编译执行。当程序执行起来时,我们称之为进程。在我们的电脑上,每一个运行着的软件,就是一个进程。


进程的定义

进程就是一个程序在一个数据集上的一次动态执行过程(程序运行的一种状态)

进程一般由程序、数据集、进程控制块三部分组成。

  1. 程序:我们编写的程序用来描述进程要完成哪些功能以及主逻辑;
  2. 数据集则是程序在执行过程中所需要使用的资源;
  3. 进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程(很重要的概念),它是系统感知进程存在的唯一标志。

进程切换

我们知道,一个CPU在同一时刻只能处理一件事情,但是呢,CPU运行速度很快,它可以实现多个进程之间来回切换来达到我们看到的多个进程同时运行的效果。

进程是一种程序运行的状态,会涉及到状态挂起的保存,状态恢复、程序的识别、CPU资源的调用等等,因此,进程之间的切换是很消费资源的

因为,进程被暂时挂起后,在随后的某个时间里,该进程再次启动的状态必须和挂起之前一致。这就意味着该进程挂起时所有的信息都要记录下来(比如指针、值等等)。这样在该进程重新启动后,所执行的调用才能拿到正确的数据。


还有就是,进程的切换是怎么样的呢? 两个条件可以触发进程切换:

① 时间轮循 : 每隔一段时间,CPU就会切换到其他进程。

② I/O操作 : 当遇到 输入输出操作时,CPU不会傻傻的等着,直接会进行切换操作。


进程状态

因此,我们得到了这么一幅图,这就是进程的状态变化:

  • 转换2和3都是由进程调度程序引起的,进程调度就是操作系统的一部分,系统认为一个运行进程占用处理器时间已经过长,就会发生进程转换。
  • 当遇到I/O状态时,就会发生转换1,然后CPU在没得到响应之前(收到有效输出),不会再运行阻塞状态的进程。



线程定义

线程的概念:“一个进程的独立运行片段”。

我们知道了,进程虽然可以完成切换,但是十分的消耗资源。线程的出现是为了降低上下文切换的消耗,提高系统的并发性,并突破一个进程只能干一样事的缺陷,使到进程内并发成为可能。

上面这三个任务,我们不能放到同一个进程里面,不然就无法实现三个任务的切换操作。 但又不想放到三个进程里(这三个任务实现的是同一个功能,所以三个进程之间需要互相访问,同时频繁的切换很费资源)。

  • 线程也叫轻量级进程,它是一个基本的CPU执行单元,也是程序执行过程中的最小单元。——相当于进程里面的进程
  • 线程的引入减小了程序并发执行时的开销,提高了操作系统的并发性能。线程没有自己的系统资源。所有的线程共用进程里面的资源


进程线程的关系

  1. 一个程序至少有一个进程,一个进程至少有一个线程.(进程可以理解成线程的容器)。

  2. 每一个进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

  3. 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

  4. 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。

  5. 进程是最小的资源单位,操作系统分资源只能分到进程(最小单位),而线程是最小的执行单位(程序真正在跑的,是线程)



乌拉!! 进程线程介绍就到这里了。各位,下期见~