原创发自我的公众号:我是攻城师
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) 路漫漫其修远兮,吾将上下而求索
分享到:
相关推荐
性能测试工程师在关注这些指标时,还要从用户、管理员和开发者角度考虑问题: - 用户关注响应时间,希望操作能迅速得到反馈,尤其是在大数据量处理时。 - 管理员关注服务器资源利用率、系统扩展性、最大访问量和...
虽然UID和PID都是系统管理的重要组成部分,但它们分别从用户和进程的角度进行识别。在Android系统中,一个PID可以关联到一个或多个UID,这意味着一个进程可能包含来自不同用户或应用程序的线程。然而,一个UID通常只...
在本项目"基于深度学习算法的交通标志识别 android app.zip"中,我们关注的是如何将人工智能和深度学习技术应用于移动设备,尤其是Android平台上的交通标志识别。这是一个典型的计算机视觉问题,旨在利用机器学习...
6. **并行和并发**:讨论多线程、多进程和同步机制,如互斥锁、信号量等。通过代码实现,可以理解并发环境下可能出现的问题及其解决方案。 7. **网络编程**:可能涵盖套接字编程,理解TCP/IP协议栈和网络数据传输的...
首先,从软件工程的角度看,12306火车票系统是一个大型的Web应用项目,其开发过程中需要遵循严谨的软件生命周期管理。这包括需求分析、系统设计、编码、测试和维护等阶段。在需求分析阶段,开发团队会明确系统功能,...
服务器端采用多线程或多进程模型处理并发请求,确保高并发下的性能稳定。心跳包机制用于检测网络连接状态,防止因长时间无数据交换导致的断连问题。 四、数据库设计 服务器端通常需要一个数据库来存储玩家信息、...
- **《Android从Linux系统启动的四个步骤》**:介绍了从Linux系统启动的角度来看待Android启动过程的具体步骤。 通过以上对Android开机启动流程的详细介绍,我们可以看到Android系统启动过程中涉及的多个关键环节...
那样,从调用程序的角度来看,它们所得到的全部是空闲的、开放的内存。然后,当通过 free() 将该指针传递回来时,我们只需要倒退几个内存字节就可以再次找到这个结构。 在讨论分配内存之前,我们将先讨论释放,...
- 多线程或多进程,如`threading`或`multiprocessing` - 可能用于并行处理多个车牌识别任务,提升效率。 在实际操作中,项目可能首先获取摄像头或视频流中的车牌图像,然后使用Python进行图像预处理,接着将处理后...
从职业发展角度来说,前端开发有着广泛的应用领域和美好的发展前景,无论是在网站设计、H5开发还是app/小程序开发等领域,前端技术都起着至关重要的作用。 前端工程师作为与用户直接交互的窗口,需要不断地优化用户...