进程线程区别(简述进程和线程的主要区别)

进程线程区别(简述进程和线程的主要区别)推荐视频linux服务端的网络并发,详细解读网络io与线程进程关系为什么不推荐做mcu与qt开发,c++ linux后台服务器开发很香吗?直播学习地址:C/C++Linux服务器开发/后台架构师【零声

推荐视频

linux服务端的网络并发,详细解读网络io与线程进程关系

为什么不推荐做mcu与qt开发,c++ linux后台服务器开发很香吗?

直播学习地址:C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂

1.什么是进程?为什么要有进程?

进程有一个相当精简的解释:进程是对操作系统上正在运行程序的一个抽象。

这个概念确实挺抽象,仔细想想却也挺精准。

我们平常使用计算机,都会在同一时间做许多事,比如边看电影,边聊天,顺便打开浏览器百度搜索一下,我们所做的这么多事情背后都是一个个正在运行中的软件程序;这些软件想要运行起来,首先在磁盘上需要有各自的程序代码,然后将代码加载到内存中,CPU会去执行这些代码,运行中会产生很多数据需要存放,也可能需要和网卡、显卡、键盘等外部设备交互,这背后其实就涉及到程序对计算机资源的使用,存在这么多程序,我们当然需要想办法管理程序资源的使用。并且CPU如果只有一个,那么还需要操作系统调度CPU分配给各个程序使用,让用户感觉这些程序在同时运行,不影响用户体验。

理所当然,操作系统会把每个运行中的程序封装成独立的实体,分配各自所需要的资源,再根据调度算法切换执行。这个抽象程序实体就是进程。

所以很多对进程的官方解释中都会提到:进程是操作系统进行资源分配和调度的一个基本单位。

2.什么是线程?为什么要有线程?

在早期的操作系统中并没有线程的概念,进程是拥有资源和独立运行的最小单位,也是程序执行的最小单位。任务调度采用的是时间片轮转的抢占式调度方式,而进程是任务调度的最小单位,每个进程有各自独立的内存空间,使得各个进程之间内存地址相互隔离。

后来,随着计算机行业的发展,程序的功能设计越来越复杂,我们的应用中同时发生着多种活动,其中某些活动随着时间的推移会被阻塞,比如网络请求、读写文件(也就是IO操作),我们自然而然地想着能不能把这些应用程序分解成更细粒度、能 准并行运行 多个顺序执行实体,并且这些细粒度的执行实体可以共享进程的地址空间,也就是可以共享程序代码、数据、内存空间等,这样程序设计模型会变得更加简单。

其实很多计算机世界里的技术演变,都是模拟现实世界。比如我们把一个进程当成一个项目,当项目任务变得复杂时,自然想着能不能将项目按照业务、产品、工作方向等分成一个个任务模块,分派给不同人员各自并行完成,再按照某种方式组织起各自的任务成果,最终完成项目。

需要多线程还有一个重要的理由就是:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器,线程之间切换的开销小。所以线程的创建、销毁、调度性能远远优于进程。

在引入多线程模型后,进程和线程在程序执行过程中的分工就相当明确了,进程负责分配和管理系统资源,线程负责CPU调度运算,也是CPU切换时间片的最小单位。对于任何一个进程来讲,即便我们没有主动去创建线程,进程也是默认有一个主线程的。

3.它们在Linux内核中实现方式有何不同?

在Linux 里面,无论是进程,还是线程,到了内核里面,我们统一都叫任务(Task),由一个统一的结构 task_struct 进行管理,这个task_struct 数据结构非常复杂,囊括了进程管理生命周期中的各种信息。

面试必问:进程和线程的区别(从操作系统层次理解)

在Linux操作系统内核初始化时会创建第一个进程,即0号创始进程。随后会初始化1号进程(用户进程祖宗:/usr/lib/systemd/systemd),2号进程(内核进程祖宗:[kthreadd]),其后所有的进程线程都是在他们的基础上fork出来的。

面试必问:进程和线程的区别(从操作系统层次理解)

面试必问:进程和线程的区别(从操作系统层次理解)

我们一般都是通过fork系统调用来创建新的进程,fork 系统调用包含两个重要的事件,一个是将 task_struct 结构复制一份并且初始化,另一个是试图唤醒新创建的子进程。

我们说无论是进程还是线程,在内核里面都是task,管起来不是都一样吗?到底如何区分呢?其实,线程不是一个完全由内核实现的机制,它是由内核态和用户态合作完成的。

【文章福利】需要C/C++ Linux服务器架构师学习资料加群812855908(资料包括C/C++,Linux,golang技术,内核,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg,大厂面试题 等)

面试必问:进程和线程的区别(从操作系统层次理解)

面试必问:进程和线程的区别(从操作系统层次理解)

创建进程的话,调用的系统调用是 fork,会将五大结构 files_struct、fs_struct、sighand_struct、signal_struct、mm_struct 都复制一遍,从此父进程和子进程各用各的数据结构。而创建线程的话,调用的是系统调用 clone,五大结构仅仅是引用计数加一,也即线程共享进程的数据结构。

面试必问:进程和线程的区别(从操作系统层次理解)

4.所以它们到底有哪些区别?

功能: 进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位

开销: 每个进程都有独立的内存空间,存放代码和数据段等,程序之间的切换会有较大的开销;线程可以看做轻量级的进程,共享内存空间,每个线程都有自己独立的运行栈和程序计数器,线程之间切换的开销小。

运行环境: 在操作系统中能同时运行多个进程;而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)

创建过程: 在创建新进程的时候,会将父进程的所有五大数据结构复制新的,形成自己新的内存空间数据,而在创建新线程的时候,则是引用进程的五大数据结构数据,但是线程会有自己的私有数据、栈空间。

进程和线程其实在cpu看来都是task_struct结构的一个封装,执行不同task即可,而且在cpu看来就是在执行这些task时候遵循对应的调度策略以及上下文资源切换定义,包括寄存器地址切换,内核栈切换。所以对于cpu而言,进程和线程是没有区别的。

附:我们通常所说的上下文切换具体指什么?

操作系统抽象出一个进程的概念,让应用程序专心于实现自己的业务逻辑既可,对应用程序屏蔽了CPU调度、内存管理等硬件细节,而且在有限的CPU上可以“同时”进行许多个任务。但是它为用户带来方便的同时,也引入了一些额外的开销。

在操作系统中,由于CPU的时间片调度策略,从一个进程切换到另一个进程需要保存当前进程的状态并恢复另一个进程的状态:当前运行任务转为就绪(或者挂起、删除)状态,另一个被选定的就绪任务成为当前任务。上下文切换包括保存当前任务的运行环境,恢复将要运行任务的运行环境。

在上下文切换过程中,CPU会停止处理当前运行的程序,并保存当前程序运行的具体位置以便之后继续运行。从这个角度来看,上下文切换有点像我们同时阅读几本书,在来回切换书本的同时我们需要记住每本书当前读到的页码。

在三种情况下可能会发生上下文切换:中断处理,多任务处理,内核/用户态切换。

在中断处理中,其他程序”打断”了当前正在运行的程序。当CPU接收到中断请求时,会在正在运行的程序和发起中断请求的程序之间进行一次上下文切换。

在多任务处理中,CPU会在不同程序之间来回切换,每个程序都有相应的处理时间片,CPU在两个时间片的间隔中进行上下文切换。

在Linux中进行内核/用户态切换也会进行上下文切换,进行系统调用时,CPU寄存器里原来用户态的指令位置需要先保存起来。接着,为了执行内核态代码,CPU寄存器需要更新为内核态指令的新位置。最后才是跳转到内核态运行内核任务。而系统调用结束后,CPU寄存器需要恢复原来保存的用户态,然后再切换到用户空间,继续运行进程,所以一次系统调用的过程,其实是发生了两次CPU上下文切换。

CPU上下文切换,是保证Linux系统正常工作的核心功能之一,一般情况下不需要我们特别。

但过多的上下文切换,会把CPU时间消耗在寄存器、内核栈以及虚拟内存等数据的保存和恢复上,从而缩短进程真正运行的时间,导致系统的整体性能大幅下降。

【版权声明】叽叽歪歪吧提醒您:请在浏览本网站关于《进程线程区别(简述进程和线程的主要区别)》信息时,请您务必阅读并理解本声明。本站部分内容以及图片来源于商家投稿和网络转载,如网站发布的有关的信息侵犯到您的权益,请及时与我们取得联系,邮箱:20451 17252#qq。com,我们会尊重您的决定并当天作出删除处理。

(0)
上一篇 2022年2月27日 14:00:05
下一篇 2022年2月27日 14:20:05

相关推荐

  • 如果你想赚钱赚钱赚钱 我想赚钱你却跟我谈理想

    如果你想赚钱赚钱赚钱(我想赚钱你却跟我谈理想)去你的理想,我就喜欢赚钱,赚大钱。只有事业达到了一定程度的人,才有资格说理想。一个人如果连养家糊口的能力都没有,拿什么谈理想,你有什么资格谈理想。我认识很多企业家,日子过得比一般人滋润一点,但也

    2022年4月2日
    12
  • 专业找人定位见人付款(怎么悄悄查看对方位置)

    专业找人定位见人付款(怎么悄悄查看对方位置)近期,不少定位App打着“只要输入手机号就能确定对方位置”的旗号,通过让消费者充值购买会员服务的形式获利。然而,很多消费者表示,这项功能并没有那么神奇。输入手机号就知对方行踪“黑科技”还是忽悠?张

    2022年3月10日
    5
  • 倾城之恋读后感 倾城之恋张爱玲在线阅读

    倾城之恋读后感(倾城之恋张爱玲在线阅读)张爱玲的长篇小说《倾城之恋》是我很喜欢的一部小说,它讲述的是一个封建大家庭的大家闺秀白流苏的爱情故事。故事的大概情节是这样的:出生于书香门第的白流苏嫁给了门当户对的富家公子唐少爷,起初他们的婚姻关系还

    2022年4月9日
    5
  • 富士通笔记本电脑怎么样(富士通笔记本为什么用的人少)

    富士通笔记本电脑怎么样(富士通笔记本为什么用的人少)富士通UH-X系列笔记本11月27日在中国台湾亮相,笔记本重量仅为778g,机身厚度15.5mm,在保证轻薄的同时依然提供丰富的接口。富士通官方强调UH-X笔记本由日本制造,提供典雅白、洗

    2022年2月26日
    36
  • 蚂蚁是不是昆虫 苍蝇是不是昆虫

    蚂蚁是不是昆虫(苍蝇是不是昆虫)出品:新浪科技《科学大家》 未读作者:威廉·C。伯格(William C。 Burger):美国芝加哥自然博物馆植物馆馆长,几十年来一直致力于生物多样性重组与保护等研究,尤其擅长用通俗的语言讲深刻的原理,帮助

    2022年3月25日 生活小百科
    10
  • lp是什么意思 lp与gp的区别

    lp是什么意思(lp与gp的区别)私募一般用有限合伙制设立股权投资公司,可以避税;不过有着合伙人50人的限制。LP是有限合伙人(Limited Partner)一般是投资者,出资方。他们以出资额对股权负责,享有回报的权利,不负责具体事务。G

    2022年5月5日
    2
  • 开始菜单没有运行(开始菜单没有运行程序)

    开始菜单没有运行(开始菜单没有运行程序)有不少深度技术用户都将自己的电脑升级到了最新版win10 21strong系统版本了,但在使用的过程中难免会遇到一些情况。近来有小伙伴就表示说自己的win10系统电脑出现了点击开始菜单没反应的问题,不

    2022年2月10日 生活小百科
    22
  • 端午节不能说快乐对吗(中秋节为什么不能说快乐)

    端午节不能说快乐对吗(中秋节为什么不能说快乐)做人啦,最重要的是开心。文/ 付彪端午节到来,朋友圈却传开一则消息:端午节不能“互祝快乐”,只能“互送安康”。据报道,这则消息还是以非遗专家“普及知识”的名义开始的。因为端午节是个祭祀节日,祭祀

    2022年2月14日 生活小百科
    28
  • 微信单向好友是什么意思 单向好友是指他删除了我吗

    微信单向好友是什么意思(单向好友是指他删除了我吗)1.轻信清理助手惹麻烦张琴是一名微商,因为业务原因,好友越来越多,目前已经达到4000多人。由于好友的上线时5000千人,为了扩大生意圈,张琴想清理一下自己的好友,把已经将她屏蔽和删除的好友

    2022年4月23日
    6
  • 100个可操作的网络赚钱方法 什么网站可以挣钱

    100个可操作的网络赚钱方法(什么网站可以挣钱)在注意力经济的时代,有一句话讲得特别在理,那就是:玩手机的方式不同,造成了人和人之间的收入差距!你细品一下,你会发现这句话说得太对了。你每天花费在手机上的时间有多少呢?玩得少的,也得有两三个小

    2022年5月1日
    14

发表回复

登录后才能评论