线程与进程入门

CathyZYF 2020-02-25 18:15:18
原文地址:https://segmentfault.com/a/1190000021665426

进程的概念

进程(Process)的官方解释,是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。

相对于程序而言,进程是一个动态的概念。可能有人不能理解动态的内涵,所以让我们来举个栗子:

一个母亲想给她的女儿烹饪一个蛋糕,于是她找来一本烹饪书籍,上面记载着做蛋糕的食谱:需要面粉、鸡蛋、蜂蜜等等原料。于是她来到厨房,准备好食材和器皿、烤箱等制作工具,开始执行做蛋糕这个活动。

在这个比喻里,这位母亲就象征着CPU,烹饪书籍上对制作蛋糕的流程,就是保存在内存里静态的程序。而那些食材,则代表程序所需的数据。而进程,则表示整个制作蛋糕的过程。

对于单核处理器而言,一个CPU在一个时间点只能处理一个进程。每当一个进程在CPU里被执行时,其他的进程都处于等待状态。

沿用上面的例子,母亲在做蛋糕的过程中,她的儿子突然跑过来,告诉她自己被蜜蜂蜇了,这时这位母亲判断了事情的轻重缓急后,暂停了制作蛋糕的流程(暂停优先级低的进程),并记住了自己做到了哪个环节(比如刚打完鸡蛋),开始处理儿子头上的伤口(开始执行新进程)。她找来一本《家用急救指南》(新进程中的程序),按照书上记载的流程,给儿子包扎。处理完儿子的这个紧急事件之后,这位母亲又回到做蛋糕的流程里,她回忆起自己刚才正在打鸡蛋,于是从之前暂停的步骤开始(取出内存中记载的状态),继续执行做蛋糕任务。

总而言之,进程代表的是一系列动作的执行,包括程序的运行、输出、输出和状态的记录。

线程的概念

线程(Thread)是建立在进程的基础上的一次程序运行单位,是cpu调度的最小单位

在一些文献中,线程又被称为微进程(miniprocess),这意味着,线程在很多方面和进程是类似的,唯一不同的,是线程之间共享了相同的内存空间(相对于一个进程而言),而进程与进程之间,则拥有各自独立的内存空间。换句话说,一个进程里可以有一个或多个线程,这些线程共享着内存为进程分配的空间。

我们为什么需要线程?

让我们来考虑一个文字处理器的例子。在文字处理器打开的一篇文档中,一共有800页。假如文档作者此时删除了第一页的某段内容,然后他希望跳转到第600页查看该页对应的篇幅。对于文字处理器而言,由于第一页的文字有了改动,它并不知道此时第600都有哪些文字,因此需要对600页之前的文字重新排版计算,然后得到第600页的内容。这样一来,当用户敲下直达第600页的命令后,需要等好一会儿才能看到内容,这显然不是我们希望的。而线程此时就能够派上用场。假设此时有两个线程,一个负责用户交互,另一个负责排版。当用户在第一时刻更改了文档内容后,负责用户交互的线程会通知排版线程,告诉它删掉了哪些东西,排版线程得到信息后,开始在后台疯狂地计算,这样一来,在用户下达跳转至600页的命令之前,排版线程很可能已经计算出第600页要展示的是哪些内容了。

总结一下进程和线程的概念,主要有以下几点需要了解:
1.CPU里一个时刻只能执行一个任务,即进程
2.每个进程之间的内存空间是独立的
3.每个进程里包含至少一个线程,并且线程之间共享着这个进程的内存空间

本篇文章引用了以下文献的内容:

Modern Operating Systems——by Andrew S. Tanenbaum / Herbert Bos

声明:该文章系转载,转载该文章的目的在于更广泛的传递信息,并不代表本网站赞同其观点,文章内容仅供参考。

本站是一个个人学习和交流平台,网站上部分文章为网站管理员和网友从相关媒体转载而来,并不用于任何商业目的,内容为作者个人观点, 并不代表本网站赞同其观点和对其真实性负责。

我们已经尽可能的对作者和来源进行了通告,但是可能由于能力有限或疏忽,导致作者和来源有误,亦可能您并不期望您的作品在我们的网站上发布。我们为这些问题向您致歉,如果您在我站上发现此类问题,请及时联系我们,我们将根据您的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。