热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

回答好进程与线程,程序员基础面试题,20190908

操作系统:进程与线程进程资源管理+线程,进程是资源分配单位,线程是CPU调度单位以前没有线程的时候,进程是操作系统中独立运行的基本单位线程出现后,线程是操作系统中,更小的能独立运行

操作系统: 进程与线程

进程 = 资源管理 + 线程, 进程是资源分配单位,线程是 CPU 调度单位

以前没有线程的时候,进程是操作系统中独立运行的基本单位
线程出现后,线程是操作系统中,更小的能独立运行的基本单位

到底什么是进程?怎么理解进程?

一般,可以把运行的程序,看成进程。
程序在整个执行过程中的描述,是进程。
程序在运行过程中,会消耗各种资源,会占用 CPU、内存和网络,会使用文件系统 I/O

进程就是运行的程序的执行过程

为什么要有进程?

最初的操作系统,只能支持跑一个程序。
随着计算机的发展,CPU 的能力越来越强,内存越来越多。可以在内存中,放入更多的可以运行的程序。
操作系统中,各个运行的程序的状态。用程序来表示,不够准确,需要新的概念。
因为可能存在内存中,一个程序跑了多份的情况。
内存中,一个程序的多个实例,怎么来清楚的表示出来呢?

进程的概念,就出来了。进程用来表示程序整个的执行过程

我们写的程序,编译为可执行程序,放在文件系统里面,格式是可执行文件,他是静态的。
只有当我们的操作系统,把可执行程序,调入我们的内存中之后,让这个程序能够执行起来。
执行,也就是这个程序能够通过 CPU , 来执行程序中的一条条指令,然后对相应的数据,进行处理,完成一定的功能。
这个过程,是一个动态执行的过程,我们称为进程。

进程的标准答案:一个具有一定独立功能的程序,在一个数据集合上的,一次动态执行过程

这整个的过程,就是进程
为什么要有线程?
多进程,消耗太大。
进程之间,他们的地址空间是独立的,一般通过沙盒保护。
进程间通信,交换数据,需要通过操作系统,开销大,过程相对复杂。
多线程,开销就小了一些。
多线程除了实现了并发,还共享相同的地址空间,也就是共享相同的资源。
一个线程产生的数据,另一个线程可以很容易地拿到。
线程间通信,比较简单。

什么是线程?

线程是进程中的一条执行流程

从资源组合的角度看:

进程,就是用来管理资源的。资源包括地址空间(代码段、数据段)、打开的文件、访问的网络。
把进程执行的功能、执行的状态,做一些拆分,交给线程来管理。

从运行的角度看:

线程就是,代码在这个资源平台上的一条执行流程。

进程 = 资源管理 + 线程

进程除了管理资源,还有一系列的线程,用来完成执行的过程。
一个进程的多个线程,共享进程所拥有的所有资源。

线程 = 进程 – 资源管理

线程,用来完成控制流的管理

区别:

  • 进程是资源分配单位,线程是 CPU 调度单位
  • 进程拥有一个完整的资源平台,
  • 线程只独享必不可少的资源,如寄存器和栈,用于维持自己的、每个线程独立的控制流。进程的资源,进程的多个线程共享
  • 线程能减少并发执行的时间和空间开销

例如: 线程的创建时间比进程短
因为进程在创建过程中,需要创建其他的管理信息。
如: 内存要怎么管理,打开的文件要怎么管理
线程要创建的时候,直接重用该线程所属的进程资源,这些资源已经管理好了。所以线程不需要创建这些管理信息


推荐阅读
  • Python并行处理:提升数据处理速度的方法与实践
    本文探讨了如何利用Python进行数据处理的并行化,通过介绍Numba、多进程处理以及Pandas DataFrame上的并行操作等技术,旨在帮助开发者有效提高数据处理效率。 ... [详细]
  • 深入解析进程、线程与协程的关系及差异
    本文详细探讨了进程、线程和协程这三个概念的基本定义、功能特点以及它们之间的相互关系。通过对比分析,帮助读者更好地理解这三种并行计算模型在实际应用中的选择与运用。 ... [详细]
  • 深入理解Java内存模型的核心原则
    本文详细解析了Java内存模型(JMM)的核心原则,包括原子性、可见性和有序性,并探讨了JMM如何通过特定机制保证这些特性,为开发者提供多线程编程的指导。 ... [详细]
  • 本文详细介绍如何在 macOS 上编译 FFmpeg 3.1.1,并将其集成到 iOS 项目中,包括必要的环境配置和代码示例。 ... [详细]
  • 深入理解Java NIO:基础概念与原理
    本文介绍了Java NIO(New Input/Output)的基本概念,包括同步与异步、阻塞与非阻塞等核心理念,以及NIO相对于传统IO的优势和应用场景。通过详细解析这些概念,帮助读者更好地理解和掌握NIO的使用。 ... [详细]
  • 本文详细介绍了WebRTC提供的音频处理引擎,包括自动增益控制(AGC)、噪声抑制(ANS)、移动设备声学回声消除(AEC)及静音检测(VAD)等核心算法,并提供了完整的C语言实现代码。 ... [详细]
  • 免费获取:全面更新的Linux集群视频教程及配套资源
    本资源包含最新的Linux集群视频教程、详细的教学资料、实用的学习课件、完整的源代码及多种软件开发工具。百度网盘链接:https://pan.baidu.com/s/1roYoSM0jHqa3PrCfaaaqUQ,提取码:41py。关注我们的公众号,获取更多更新的技术教程。 ... [详细]
  • 收割机|篇幅_国内最牛逼的笔记,不接受反驳!!
    收割机|篇幅_国内最牛逼的笔记,不接受反驳!! ... [详细]
  • 深入理解BIO与NIO的区别及其应用
    本文详细探讨了BIO(阻塞I/O)和NIO(非阻塞I/O)之间的主要差异,包括它们的工作原理、性能特点以及应用场景,旨在帮助开发者更好地理解和选择适合的I/O模型。 ... [详细]
  • GNU GRUB(简称GRUB)是一个来自GNU项目的支持多启动的引导加载程序。它允许用户在同一台计算机上安装多个操作系统,并在启动时选择希望启动的系统。 ... [详细]
  • 本文探讨了在支付项目开发中使用SS5 Socket Server实现内部网络访问外部网络的技术方案。详细介绍了SS5的安装、配置及性能测试过程,旨在为面临相同需求的技术人员提供参考。 ... [详细]
  • 浪潮AI服务器NF5488A5在MLPerf基准测试中刷新多项纪录
    近日,国际权威AI基准测试平台MLPerf发布了最新的推理测试结果,浪潮AI服务器NF5488A5在此次测试中创造了18项性能纪录,显著提升了数据中心AI推理性能。 ... [详细]
  • 本文提供了一套实用的方法论,旨在帮助开发者构建能够应对高并发请求且易于扩展的Web服务。内容涵盖了服务器架构、数据库管理、缓存策略以及异步处理等多个方面。 ... [详细]
  • 在使用Firefox浏览器打开本地HTML文件时,尝试调用Canvas的drawImage方法可能会遇到NS_ERROR_NOT_AVAILABLE错误。本文探讨了这一问题的原因及解决方案。 ... [详细]
  • 本文介绍了Linux环境下的多种进程间通信方法,包括管道、信号、消息队列、共享内存、信号量和套接字等。同时,探讨了JavaScript动态加载脚本的优势与使用XMLHttpRequest对象获取JavaScript代码的优缺点。 ... [详细]
author-avatar
李妙妙_minioniu_173
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有