原创发自我的公众号:我是攻城师
https://mp.weixin.qq.com/s?__biz=MzAxMzE4MDI0NQ==&mid=2650335998&idx=1&sn=33ec033a05a312cdbd8054dc68cc922d&chksm=83aac6c4b4dd4fd2d79898ceea02afa1d593cbf5e8dd3c768a270ad723b9df935770d229b322#rd
在现在人人都有一部手机或电脑的年代,我们几乎天天都在使用各种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) 路漫漫其修远兮,吾将上下而求索
分享到:
相关推荐
用于app模块初始化,可区分进程,线程,并设置优先级
强行结束APP进程
安卓app开发项目-流媒体线程下载,播放,(支持断点)(源码).zip安卓app开发项目-流媒体线程下载,播放,(支持断点)(源码).zip安卓app开发项目-流媒体线程下载,播放,(支持断点)(源码).zip安卓app开发项目-流媒体线程...
app守护进程
因为我们的进程是fork出来的,fork出来的进程父进程是app进程号当app被kill掉时,子进程被孤儿init领养 变成了空进程。怎样在监听自己变成死亡进程: 在Linux系统下,如果使用sigaction将信号SIGCHLD的sa_flags...
android安卓app如何彻底结束进程. 光调用finish()是结束不了程序的,程序中的线程依旧在后台运行
Android下线程与进程,详细可以参见博客:http://www.cnblogs.com/plokmju/p/android_ProcessOrThread.html
设计模式 POSIX多线程程序设计(第4章:使用线程的几种方式)瓦釜苑-CSDN博客posix多线程程序设计。调试相关:Linux进程崩溃原调试_guotian
进程隐藏工具进程隐藏工具进程隐藏工具进程隐藏工具进程隐藏工具进程隐藏工具进程隐藏工具进程隐藏工具进程隐藏工具进程隐藏工具进程隐藏工具进程隐藏工具
1.HideApp隐藏进程 2.对于防止游戏或其它检测脚本或挂的进程,有很好的防范作用
从数据角度看慢病管理App.pdf
多开工具HideApp隐蔽进程工具 一个多开的工具 很好用
从用户角度分析与改进音乐APP——以网易云音乐为例.pdf
从经济角度看音乐社交短视频软件抖音APP走红的原因.pdf
安卓app之间的socket通信,支持多线程,简单易实现。测试觉得没问题。
HermesEventBus单个app里面双进程通信,实现在一个app里面,两个进程间的通信
从传播角度看音乐短视频流行现象——以抖音APP为例.pdf
马士兵多线程预习资料。 什么是叫一个进程? 什么叫一个线程? - Program app ->QQ.exe ... 线程:作为一个进程里面最小的执行单元它就叫一个线程,用简单的话讲一个程序里不同的执行路径就叫做一个线程
一个简单的跨进程AIDL访问,包含简单的被调用程序和调用AIDL的程序,方便初学者学习AIDL跨进程,跨APP数据访问。 客户端和原程序跟目录下都包含了read.txt阅读文档,方便学者学会AIDL的调用 【程序基于UFT-8格式,...
多线程下载:1、创建URL对象; 2、获取指定URL对象所指向资源的大小; 3、在本地磁盘上创建一个与网络资源相同大小的空文件; 4、计算每条线程应该下载网络资源的哪个部分; 5、依次创建、启动多线程来下载网络资源...