进程和线程基础(理论概念)

1. 定义

看了下面的定义,可能会有点晕,但我还是要把他写下来(为了严谨)。

进程是资源(CPU、内存等)分配的基本单位,具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。

线程是进程的一个实体,是独立运行和独立调度的基本单位(CPU上真正运行的是线程)。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

​2.区别

线程基本上类似于进程(有时被称为“轻量级进程”)。线程属于进程。简单的模型是在每个进程中有一个线程(在这种情况下,术语“线程”变得多余),但任何进程都可以有多个线程。线程共享它们的大部分上下文,尽管它们每个都有一些私有数据空间,例如处理器寄存器和它们自己的堆栈。

  1. 进程是资源分配的基本单位;线程是程序执行的基本单位。

  2. 进程拥有自己的资源空间,没启动一个进程,系统就会为它分配地址空间;而线程与CPU资源分配无关,多个线程共享同一进程内的资源,使用相同的地址空间。

  3. 一个进程可以包含若干个线程。

3. 优劣

正是因为这二者有区别,所以带来的各自的优劣

  1. 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(Inter Process Communication,IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。

  2. 线程的调度与切换比进程快很多,同时创建一个线程的开销也比进程要小很多。

  3. 但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

为什么这个问题是面试高频?

既然这个问题是面试当中会被经常问到的,所以我去网上找一个答案,背出来不就好了。

但是,真的背答案就可以了吗?

我们来分析一下为什么众多面试官老是问这个问题,他应该并不是想听到一个对书本上概念的重复。

那么,他究竟想考什么?

  1. 侧重点一:面试官想要了解面试者对这一知识点的理解程度(因为这是操作系统中不得不提的一个概念)。如果这个概念回答不上来,意味着面试者对操作系统的学习并不深。

  2. 侧重点二:面试官可以对你的回答作进一步展开,通过你的回答某个侧重点方向来进一步提问你对你自己回答的理解。(这个高频问题的价值所在)。

比如:

  • 当你回答到:进程与线程的内存结构不同。进程与进程之间不能共享内存,而线程可以。那么面试官就可以就内存这一点深入提问——内存如何寻址?

  • 当你回答:线程之间通信很方便,进程与进程通信不方便。那么问题就又来了,你给我说一下进程之间怎么通信?进程之间通信方法有哪些?不同通信方法有哪些优劣点?

C/C++Linux服务器开发高级架构师/C++后台开发架构师​免费学习地址

另外还整理一些C++后台开发架构师 相关学习资料,面试题,教学视频,以及学习路线图,免费分享有需要的可以自行添加:Q群:720209036 点击加入~ 群文件共享

再谈“进程”与“线程”(口语表述)

进程的本质: :正在执行的一个程序,可以进程比作一个容器或者工厂

​通过上图,方便我们了解并记忆:

  1. 进程与进程之间相对独立

  2. 进程可以包括几个或者上百个线程在运行。

  3. 内存(逻辑内存)包括在进程里面,每个进程的内存都是互相独立的,但从一个更高的层次上看,不同的进程也共享着一个巨大的空间,这个空间就是整个计算机。

  4. 进程共有文件/网络句柄(handle),这样可以打开同一个文件,抢同一个网络端口。

从不同的视角来看进程:

​线程的本质:真正运行的是一个一个的线程

​同理,上图我们知道线程包含:

  1. 栈(堆栈):主线程的main函数、进行函数调用的参数和返回地址、局部变量等内容都会被压入栈内

  2. PC(Program Couner):程序计数器,PC的指针指向代码所在的内存地址。

  3. TLS(Thread local storage):分配内存,存放变量

当有了上面的问题做引子后,面试官就可以借此引出更多话题:

1. 如何通信(沟通)的内容

通信是人的基本需求,进程与进程之间是相互独立的,也有通信需求。根据这一问题就可以展开内容提问:

  • 进程/线程如何通信

  • 答:进程可以通过管道、套接字、信号交互、共享内存、消息队列等等进行通信;而线程本身就会共享内存,指针指向同一个内容,交互很容易。

  • 通信方式的差异,比如进程间共享内存和消息队列有何异同?

2. 如何同步(协调)的内容

一旦有了通信,人与人之间就会产生矛盾,进程也一样。这些矛盾就会体现在如何同步上。

  • 在单个CPU下,实际上在任何时刻只能有一个进程处于执行状态。而其他进程则处于非执行状态。我们是如何确定在任意时刻到底由哪个进程执行,哪些不执行呢?进而又可以引出锁的概念?(如何进行进程调度?)

  • 线程之间的关系是合作关系。既然是合作,那就得有某种约定的规则,否则合作就会出问题。(如何进行线程同步?)

3. 关于内存原理相关问题

进程要分配内存,所以开销很大,进程只需要分配栈,分配一个PC就好,内存开销小。

这一块就可以问到了操作系统中的内存原理相关的内容。

线程可以由操作系统调度程序管理,或者在用户级别由应用程序中的单独调度程序管理。 (或两者兼有!)在 Java(可能还有其他地方)中,在应用程序 (JVM) 中调度的线程称为“绿色线程”;操作系统中的那些(如果可用)是“本机线程”。

就像进程一样,每个线程都有自己的状态:{正在运行、就绪或阻塞}。

​用户的线程管理通常允许更快的线程切换(不需要(慢)系统调用),并且可以根据应用程序定制调度,具有更可预测的行为。另一方面,这些可能需要使用依赖于所有线程“表现良好”的协作调度;例如,如果一个线程进行了阻塞的系统调用,则所有线程(在该进程中)都将被阻塞,即使其他线程(原则上)可以继续;因此可能会有不必要的(且昂贵的)进程上下文切换。

操作系统的线程管理允许以与任何进程类似的方式调度线程。上下文切换(在同一进程内)可能比进程切换更便宜。

总结

总之,如果上述内容你都了解,那肯定是不怕被问到(大佬,请收下我的膝盖);如果看了此篇文章之后,你能答出个大概,我相信面试官也会放过你,毕竟,我们也真的不是背书机器。所以,我们在回答过程中,尽量别给自己挖坑,用自己理解的知识点进行回答。切忌背书式的回答,模棱两可,因为这样面试官几个连环炮就容易暴露问题了。

如果你能看到这,能否给我点个关注,点个赞让我也收到鼓励。如果觉得我写的内容有误,也欢迎评论指出。

注意,要敲黑板啦。

  • 进程是什么?它指的是一个运动中的程序。从名字上看,进程表示的就是进展中的程序。一个程序一旦在计算机里运行起来,它就成为一个进程。进程与进程之间可以通信、同步、竞争,并在一定情况下可能形成死锁。

  • 那么线程是什么?我们知道,进程是运转的程序,是为了在CPU上实现多道编程而发明的一个概念。但是进程在一个时间只能干一件事情。如果想同时干两件事,办法就是线程。线程是进程里面的一个执行上下文或者执行序列。

参考资料

​推荐一个零声教育C/C++后台开发的免费公开课程,个人觉得老师讲得不错,分享给大家:C/C++后台开发高级架构师,内容包括Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习

原文地址:从线程与进程的区别这一问题出发 - 掘金

探究线程与进程的区别这一问题相关推荐

  1. 对线程与进程的区别以及对多线程并发的理解

    一.线程与进程的区别 先简单说说线程与进程的概念: (1)进程是指一个内存中运行的应用程序,比如在Windows系统中,一个运行的exe就是一个进程. (2)线程是指进程中的一个执行流程. 区别: 一 ...

  2. 什么是线程线程和进程的区别

    什么是线程线程和进程的区别 线程是进程的一个实体,是cpu调度和分派的基本单位,比进程小可以独立运行的基本单位 一个进程包含多个线程具有独立功能的程序是操作系统进行资源分配和调度的一个独立单位

  3. Linux中线程和进程的区别

    Linux中线程和进程的区别 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,它是系统进行资源分配和调度的一个独立单位.例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括 ...

  4. C#中线程和进程的区别

    线程和进程的区别 进程是程序和调度的独立单元 线程是CPU调度的基本单元 一个进程包含一个或多个线程 线程是轻量级的进程

  5. 线程和进程的区别(面试必备)

    参考文章: https://www.jianshu.com/p/2dc01727be45 线程与进程的区别通俗的解释: https://www.jianshu.com/p/8ad441510860 附 ...

  6. 为什么校招面试中总被问“线程与进程的区别”?我该如何回答?

    作者 | 宇宙之一粟 责编 | 徐威龙 出品 | AI 科技大本营(rgznai100) 进程与线程?(Process vs. Thread?) 面试官(正襟危坐中):给我说说"线程&quo ...

  7. 2012-5-3 线程和进程的区别

    进程和线程的区别 http://www.cnblogs.com/lmule/archive/2010/08/18/1802774.html 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. ...

  8. Python | 面试必问,线程与进程的区别,Python中如何创建多线程?

    其实关于元类还有很多种用法,比如说如何在元类当中设置参数啦,以及一些规约的用法等等.只不过这些用法比较小众,使用频率非常低,所以我们 不过多阐述 了,可以在用到的时候再去详细了解.我想只要大家理解了元 ...

  9. meo学习笔记3:并行与并发,线程与进程的区别

    并发与并行,线程与进程到底有啥区别呀?? 1.前言 最近有为了工作简单看一下操作系统的相关基础问题,看到并发和并行以及线程和进程,感觉可以记录区分一下,以下内容来自网上的文章和我自己的一些理解: 2. ...

最新文章

  1. 《Python Cookbook》 最佳译本开放下载啦!
  2. EM不同气候条件下土壤稀有与丰富微生物类群的分化策略
  3. Windows 2000、XP、XP+进程名描述
  4. splite和map的结合使用
  5. 《Java语言程序设计与数据结构》编程练习答案(第十章)
  6. 浅析HiShop、Shopex、ECshop、V5shop四大网店系统
  7. abaqus土木结构视频教程
  8. input函数使用及运算符
  9. PAT-ADVANCED1118——Birds in Forest
  10. Ubuntu 20.04无法连接网络(网络图标丢失)的解决方案
  11. numpy库的函数学习
  12. C语言入门——C语言概述
  13. 从零到一构建CI/CD的DevOps自动化流水线,需要考虑的开源项目
  14. 第二十九章 狼心狗肺
  15. c语言实现万能求积分
  16. HCIE - Routing Switching v3.0 Outline
  17. output delay含义
  18. python积木编程软件下载_积木编程软件-积木编程官方版下载-红软网
  19. Mel,Bark以及ERB刻度
  20. React官网核心概念模块知识点整理(一)

热门文章

  1. 隐藏键盘_吊打苹果官方键盘?ipad第三方磁吸可拆卸键盘评测
  2. 人工智能知识全面讲解: 图像识别的准备工作
  3. PTC Creo 4.0 M150
  4. 网络风暴检测软件_百朗英语听力风暴强化训练营公众号入口
  5. 山东大学暑期项目实训-基于信用评分卡算法模型的个人信用评级系统的设计与实现-第四周-12(7月23日)
  6. 例题10-15 杆子的排列 UVa1638
  7. asp编程工具_asp.net core 成为构建企业首选
  8. 设计模式——状态模式(State Pattern)
  9. Python爬虫笔记——if __name__ == ‘__main__‘ 如何正确理解和__init__和self 的解析
  10. Python画图新罗马字体调整