从App的角度看进程和线程

在现在人人都有一部手机或电脑的年代,我们几乎天天都在使用各种app,如微信,QQ,抖音,优酷等等软件,表面上我们是与各种app交互,但如果站在操作系统的角度来看,其实我们每天都是在和各种进程或者线程打交道,如果你已经有点疑惑了,没关系,下面我们慢慢来聊个明白。

先看这么几个问题:

1,你手机或者电脑上装的各种app在本质上是什么?

2,一个软件打开和不打开的区别是什么?

3,为什么打开的软件越多就感觉系统越慢?

4,为什么你在用微信语音的时候,还能和别人聊天发消息?

下面我们带着问题来学习一下这其中的知识:

首先对于第一个问题比较简单,我们的各种app其实都是一个软件,描述的再专业一些就是一个程序或者一份能执行的代码。

第二个问题,在使用者层面,打开了就是能用的app,不打开就是一个快捷图标,但在操作系统层面就不一样了,打开时候操作系统实际上会创建一个进程来运行,而关闭的时候,进程就会退出。

那么问题来了,什么是进程:简单的说就是一个正在运行的程序实例。 程序的运行是需要内存和各种操作系统资源的,不同的程序使用的资源是不一样的,比如你打开一个吃鸡游戏和打开一个记事本两者消耗的资源是有很大差异的。

这也就解释了为什么打开的软件越多系统就越卡顿,本质上软件越多,打开的进程就越多,而每个进程都需要一定能资源才能维持运行,我们的操作系统的资源又是有限的,所以占用的越多系统就会越繁忙,就会出现各种卡顿和反应变慢。

仅仅把软件运行起来还是不够的,因为我们还要在软件里面各种交互,比如使用微信语音的同时,还能给对方发图片,或者捞个漂流瓶。再或者使用有道云笔记的时候,你在不停的写字,后台有一个线程会自动每隔一段时间保存一下内存,避免突然断电时内容全部丢失,这底层其实就是使用不同的线程来处理的。

到这里,我们在总结下进程和线程的定义:

进程:一个正在运行的程序实例,包含一个或多个线程,最少有一个线程。

线程:执行进程的一部分程序或者代码指令。

那么他们之间的区别和联系是什么?

(1)进程包含至少一个线程,果只有一个线程,这个线程通常叫做主线程。线程是进程的一部分代码或者指令

(2)进程有独立的内存存储,线程共享进程的内存空间,此外线程有自己独立的的栈存储。

(3)进程通信只能依靠pipe管道或者socket,一个进程内的线程可以直接通信

(4)创建一个进程是重量级操作,而创建一个线程是轻量级操作

(5)进程的文件描述符大部分不共享,线程共享文件描述符

(6)进程有独立的signal信号,线程共享进程的signal信号

(7)进程相互之间不依赖,线程之间有依赖。

(8)进程不需要同步,线程一般需要同步

(9)进程是数据组织的概念,线程是cpu调度的概念

(10) 进程上下文切换慢,线程上下文切换快

最后还有一个问题,子进程与线程有什么关系?这里需要注意子进程也是一个进程,一般用于多任务的操作系统,子进程也称子任务与进程的性质是一样的,也可以包含一个或多个线程。

总结:

本文主要介绍了操作系统中进程和线程的定义,区别和联系。了解这些知识将更加有助于我们学习和使用多线程编程。有一点需要大家注意,进程是程序的运行实例,类似面向对象编程里面的对象,而程序则更像是一个类,通过这个程序我们可以构造多个对象,也就是我们可以启动多个进程,比如PC上的QQ是可以启动数个的,当然跟软件有关系,有些软件只能启动一个,每启动一个程序,其实就是启动了一个进程。如在java的程序里面每启动一个main方法,其实就是启动了一个jvm进程,而main方法就是我们上面所说的进程中至少包含一个线程的主线程。

原文发布于微信公众号 - 我是攻城师(woshigcs)

原文发表时间:2018-06-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯云服务器团队的专栏

腾讯云 CBS 性能测试用例参考

2、fio测试建议在空闲的、未保存重要数据的硬盘上进行,并在测试完后重新制作文件系统。请不要在业务数据硬盘上测试,避免底层文件系统元数据损坏导致数据损坏。

46513
来自专栏后端云

Openstack两个容易混淆的概念

az是在region范围内的再次切分,只是工程上的独立,例如可以把一个机架上的机器划分在一个az中,划分az是为了提高容灾性和提供廉价的隔离服务。选择不同的re...

1714
来自专栏云计算教程系列

如何使用ntopng监控您的网络

ntop 是最好的网络监控工具之一。ntop是一个网络探测器,它以与top显示进程般类似的方式显示网络使用率。在交互模式中,它显示了用户终端上的网络状态。在网页...

3144
来自专栏编程一生

漫画:性能、可用性和锁

1314
来自专栏北京马哥教育

让你的Git水平更上一层楼的10个小贴士

最近,我们发表了关于Git基础知识和在团队中使用Git的教程。我们之前讨论的那些命令,已经足够让帮助一个开发者在Git世界里生存了。本篇文章,我们将尝试探索如何...

3025
来自专栏FreeBuf

[安全科普]你必须了解的session的本质

有一点我们必须承认,大多数web应用程序都离不开session的使用。这篇文章将会结合php以及http协议来分析如何建立一个安全的会话管理机制。 我们先简单的...

2107
来自专栏编程

使用GitHub搭建个人博客

今年使用GitHub搭建了自己的博客:kaze2017.com 我整理了一下搭建博客的过程,分为购买域名、准备环境、Git和GitHub、搭建博客、绑定域名、感...

26610
来自专栏FH云彩

GetFaviconAPI(获取站点Favicon)

1043
来自专栏python3

python 软件目录结构规范

"设计项目目录结构",就和"代码编码风格"一样,属于个人风格问题。对于这种风格上的规范,一直都存在两种态度:

4661
来自专栏BestSDK

微软发布 Windows 10 SDK build 15042

微软向开启了快速更新的 PC 平台开发者们推送了 Windows 10 SDK build 14046 预览版本,带来了一些微小的新特性。 ? 微软表示该 SD...

2864

扫码关注云+社区