文档章节

进程与线程杂谈

o
 osc_a22drz29
发布于 2019/03/22 15:14
字数 1387
阅读 0
收藏 0

精选30+云产品,助力企业轻松上云!>>>

今天同事突然问我线程与进程的关系,虽然给她解释完,但是看她茫然的眼神,我就知道并没有解释清楚。

程序概述

谈进程与线程之前,我们先谈下什么是程序,程序是为实现特定目标或解决特定问题而用计算机语言编写命令序列的集合。说得通俗点就是你用计算机听得懂话(编程语言)命令计算机为你做特定的事情。

进程概述

在我理解中,一个进程就是一个程序的一次执行过程,如果要专业的话来说

进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义。进程一般由程序,数据集合和进程控制块三部分组成。
程序用于描述进程要完成的功能,是控制进程执行的指令集。
数据集合是程序在执行时所需要的数据和工作区;程序控制块包含进程的描述信息和控制信息是进程存在的唯一标志

实例

打开window的任务管理器,创建一个记事本,打开记事本,会发现在任务管理器的进程列表发现“记事本”这个进程

我们多创建3个记事本,全部打开,观察进程列表,会发现有四个进程正在运行

那进程是如何工作的,线程(小弟)就闪亮登场了,在谈线程前,我们先总结下程序与进程的关系。

程序与进程的关系

  1. 一个程序可以对应多个进程,表示该程序被多次执行。
  2. 一个进程只能对应于一个程序,表示该进程是按照某个程序进行的一次执行过程。

线程

很多人好奇进程是如何做事的。事实上进程就是个大爷,是不做事的,而是吩咐别人做事,"别人"就是线程这位苦逼的被压榨者,当进程要做一件事,就会开启一个线程,所以我们可以得出一个结论,一个进程至少要有一个线程。没有线程这位苦逼的劳力就没人做事。被这么压榨的线程有一天终于爆发了,准备搞事情,农民起义。不幸的是他还没正式行动前就失败了。失败的原因如下

  1. 线程不能单独存在,必须依赖且由进程产生,它是进程的组成部分
  2. 进程可以有多个线程(多线程),极端情况下,至少有一条线程。

实例

打开记事本,任务管理器

可以看到这个记事本的进程里,有6个线程。

线程的生命周期

新建-->就绪-->运行-->阻塞-->死亡

上厕所

你平时去商城上厕所,准备去上厕所就是新建,上厕所要排队,排队就是就绪,有坑位了,轮到你了,拉屎就是运行,你拉完屎发现没有手纸,要等待别人给你送纸过来,这个状态就是阻塞,等你上完厕所出来,上厕所这件事情结束了就是死亡状态了。

注意:便秘也是阻塞状态,你便秘太久了,别人等不及了,把你赶走,这个就是挂起,还有一种情况,你便秘了,别人等不及了,跟你说你先出去酝酿一下,5分钟后再过来拉屎,这就是睡眠

多线程

很多人有这样的体验,打开浏览器,一边写博客,一边听歌,我们必须打开两个网页。一个用来写作,一个听歌曲,现在浏览器有两种处理方案,一种先执行听歌任务,播放任务结束后,在执行写作任务。如果按这种方式执行,写博客的想砸电脑的心都有了,另一种就是多线程执行,

浏览器开启两个线程,一个线程负责播放音乐任务,一个线程打开博客写作,相当于并行处理两个任务。但这里的并行有时候并不是真正的的并行,而是将CPU分片,每一片的单位是0.001秒,两个线程轮番占用CPU的时间,最终在2个线程优先级相同的情况下,会各占用CPU 0.5秒的时间。但因为这个切换太快了,用户是根本感觉不到的。但这种机制并不是真正的并行。

  1. 为了更好的利用cpu的资源,如果只有一个线程,则第二个任务必须等到第一个任务结束后才能进行,如果使用多线程则在主线程执行任务的同时可以执行其他任务,而不需要等待。
  2. 进程之间不能共享数据,线程可以。
  3. 系统创建进程需要为该进程重新分配系统资源,创建线程代价比较小。

总结

进程和线程都是一个时间段的描述,是CPU工作时间段的描述。

================================================

关于多线程后续Java的线程整理会详细介绍

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
CPU高负载排查小技巧(2分钟速读版),细心的优化可能为公司节省一个亿!

女主宣言 服务优化是一个细心、漫长的过程,一个很小的优化不仅可以为用户带来更稳定更快速的互联网体验,也许还会为公司降低百万以上的成本。熟练掌握服务端排错技巧,已经是“匠心工程师”...

ZVAyIVqt0UFji
2018/07/12
0
0
【杂谈】从底层看锁的实现

以下内容针对互斥锁。 为什么需要锁? 锁代表着对临界区的访问权限。只有获得锁的操作对象,才能进入临界区。 锁的本质是什么? 锁的本质是一个数据结构(或者说是一个对象),这个对象内保留...

osc_tr9tcucx
04/16
1
0
杂谈Android线程优先级

背景:最近在梳理Android线程调度的相关内容。在梳理过程中,阅读了部分源码,以及相关的介绍文章,甚至重新翻起了《Linux内核设计与实现》,但是距离理解透彻,并且能够用自己的语言清晰无误...

腾讯Bugly
2019/02/28
0
0
线程

Java 并发编程:线程池的使用 Java 并发编程:线程池的使用 java 多线程核心技术梳理 (附源码) 本文对多线程基础知识进行梳理,主要包括多线程的基本使用,对象及变量的并发访问,线程间通信...

掘金官方
2018/01/12
0
0
编程基础知识

女主宣言 OpsDev 团队从九月中旬启动了“公开课”形式的技术分享活动,由某领域擅长的同学系统性向大家介绍技术要点和细节。第一期公开课由李钢老师开讲,内容为“应用编程基础课”,分为5节...

ZVAyIVqt0UFji
2018/09/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

dict.items()和dict.iteritems()有什么区别?

问题: Are there any applicable differences between dict.items() and dict.iteritems() ? dict.items()和dict.iteritems()之间是否有适用的区别? From the Python docs: 从Python文档中......

法国红酒甜
今天
20
0
R中“ =”和“ <-”赋值运算符有什么区别?

问题: What are the differences between the assignment operators = and <- in R? R中赋值运算符=和<-之间有什么区别? I know that operators are slightly different, as this example ......

fyin1314
今天
20
0
之间的区别 和

问题: I'm learning Spring 3 and I don't seem to grasp the functionality behind <context:annotation-config> and <context:component-scan> . 我正在学习Spring 3,并且似乎不太了解<......

javail
今天
15
0
业内首款,百度工业视觉智能平台全新亮相

本文作者:y****n 业内首款全国产化工业视觉智能平台——百度工业视觉智能平台亮相中国机器视觉展(Vision China),该平台所具有的核心AI能力完全自主可控,在质检、巡检等场景中具有高效、...

百度开发者中心
昨天
7
0
我们如何制作xkcd样式图? - How can we make xkcd style graphs?

问题: Apparently, folk have figured out how to make xkcd style graphs in Mathematica and in LaTeX . 显然,民间已经想出了如何在Mathematica和LaTeX中制作xkcd风格的图形。 Can we d......

富含淀粉
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部