`
qindongliang1922
  • 浏览: 2211801 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:118430
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:126754
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:60809
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71971
社区版块
存档分类
最新评论

从App的角度看进程和线程

    博客分类:
  • JAVA
阅读更多
原创发自我的公众号:我是攻城师

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) 路漫漫其修远兮,吾将上下而求索


0
0
分享到:
评论

相关推荐

    Qt线程之间通信、线程和进程之间通信实例

    在编程领域,多线程和多进程是提升应用程序性能和响应速度的重要手段。Qt库,一个跨平台的应用程序开发框架,提供了丰富的API来支持线程和进程间的通信。本实例将深入探讨Qt如何实现线程间通信以及线程与进程间通信...

    Linux进程和线程的基本编程、通讯和例程1

    总的来说,Linux进程和线程的编程涉及到多个层面,从基础概念到高级应用,都需要深入理解和实践。学习过程中,可以通过阅读官方文档、博客文章和开源项目来积累经验。同时,掌握有效的调试技巧和工具,能够帮助我们...

    Android-用于app模块初始化可区分进程线程并设置优先级

    本项目“Android-用于app模块初始化可区分进程线程并设置优先级”聚焦于如何有效地管理进程和线程,以提高应用的性能和响应速度。下面将详细介绍这个项目中的核心知识点。 1. **进程与线程的概念** - **进程**:是...

    获取当前所有进程线程Cpu占用率

    在IT领域,尤其是在系统管理和性能监控中,了解和获取当前所有进程及线程的CPU占用率是一项基础且重要的任务。这有助于我们分析系统的资源使用情况,排查性能瓶颈,以及优化程序运行效率。以下是对给定标题和描述所...

    利用进程与线程对计算机进行侦测程序.rar

    在计算机科学领域,进程和线程是操作系统中的两个核心概念,尤其在软件开发中,它们对于理解和优化程序性能至关重要。本教程"利用进程与线程对计算机进行侦测程序"显然是一个C#语言编写的小程序,旨在教育学习者如何...

    HideApp隐藏进程工具

    2. **HideApp.exe**:这是HideApp的主执行文件,双击运行后,用户可以通过它来启动和操作隐藏进程的功能。 3. **ver.ini**:版本信息文件,通常包含软件的版本号、发布日期等信息,用于标识软件的更新状态。 4. **...

    进程隐藏工具HideApp

    5. **动态加载与卸载**:HideApp可能动态加载和卸载隐藏的进程,以避开静态分析。 在实际应用中,HideApp可以有以下几种场景: 1. **安全防护**:企业或个人可以使用HideApp来隐藏关键进程,防止恶意软件或者黑客...

    android安卓app如何彻底结束进程. 光调用finish()是结束不了程序的,程序中的线程依旧在后台运行.zip

    在Android系统中,当用户点击应用的返回按钮或者调用`finish()`方法时,当前活动(Activity...通过上述方法的组合使用,可以有效地结束Android App的进程,但需谨慎操作,避免对应用的正常功能和用户体验造成负面影响。

    强行结束APP进程

    在Android系统中,"强行结束APP进程"是一个常见的操作,特别是在优化系统性能或者解决应用卡顿问题时。本文将深入探讨这一主题,介绍如何在Android平台上强制关闭应用程序,并讨论其背后的技术原理、可能的影响以及...

    ipkq.rar_进程与线程

    在Windows操作系统中,进程与线程是两个至关重要的概念,它们是系统管理和调度程序执行的基础。本文将深入探讨这两个概念,以及Windows系统如何在启动时启动其他应用程序。 首先,我们来理解“进程”。进程可以被...

    app守护进程,双守护进程

    在Android系统中,"app守护进程"是一种设计模式,...总之,"app守护进程"和"双守护进程"是Android开发中提高应用稳定性和服务连续性的关键技术。通过理解和应用这些技术,开发者可以创建出更健壮、用户体验更好的应用。

    安卓app开发项目-流媒体线程下载,播放,(支持断点)(源码).zip

    安卓app开发项目-流媒体线程下载,播放,(支持断点)(源码).zip安卓app开发项目-流媒体线程下载,播放,(支持断点)(源码).zip安卓app开发项目-流媒体线程下载,播放,(支持断点)(源码).zip安卓app开发项目-流媒体线程...

    多开工具HideApp隐蔽进程工具

    HideApp作为一个多开工具,不仅具备基本的多开功能,还特别强调了隐蔽进程的技术,使得应用程序的多开变得更加安全和隐蔽。本文将深入探讨HideApp的工作原理,以及其在隐藏进程方面的独特之处。 首先,让我们了解...

    NDK20_线程轮询实现双进程守护

    因为我们的进程是fork出来的,fork出来的进程父进程是app进程号当app被kill掉时,子进程被孤儿init领养 变成了空进程。怎样在监听自己变成死亡进程: 在Linux系统下,如果使用sigaction将信号SIGCHLD的sa_flags...

    android主线程、子线程及线程间通信方式测试app

    5. **实践测试**:"android主线程、子线程及线程间通信方式测试app"可能包含了各种示例,帮助开发者了解和实践这些概念。通过实际操作,开发者能更好地理解不同线程的使用场景,以及如何有效地进行线程间通信。 总...

    Android 通过process进程信息拿到当期正在运行的APP包名

    这些代码会涉及到Android权限设置、异常处理、线程同步等技术,确保正确和安全地获取到当前栈顶应用的包名。 总的来说,通过分析和理解Android系统的进程模型,结合Java代码执行shell命令和解析输出,我们可以获取...

    hideapp 隐藏进程

    总的来说,"hideapp 隐藏进程"是一款针对普通用户设计的隐私保护工具,它可以帮助用户隐藏他们不希望他人看到的应用,但同时也需要注意其潜在的安全风险和系统影响。正确且谨慎地使用这类工具,才能在享受便利的同时...

    Android-安卓跨进程跨app通信框架

    "Android-安卓跨进程跨app通信框架"就是为了解决这一问题而设计的。 这个框架的核心目标是提供一个简单易用的API,使得开发者可以轻松地在不同的Android应用之间传递数据和执行操作。它通常会包含以下几个关键组成...

    HermesEventBus单个app里面双进程通信

    在Android应用开发中,进程间通信(Inter-Process Communication,简称IPC)是一个常见的需求,尤其在大型应用中,为了提高性能和隔离性,通常会将不同的功能模块分配到不同的进程中运行。HermesEventBus是一个轻量...

    Android应用源码之强行结束APP进程的方法-IT计算机-毕业设计.zip

    这个"Android应用源码之强行结束APP进程的方法"压缩包文件提供了相关的源码示例,非常适合毕业设计学习和论文研究。下面我们将深入探讨Android应用的生命周期、结束APP进程的几种方法以及相关注意事项。 首先,我们...

Global site tag (gtag.js) - Google Analytics