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

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

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

操作系统: 进程与线程

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

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

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

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

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

为什么要有进程?

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

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

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

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

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

什么是线程?

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

从资源组合的角度看:

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

从运行的角度看:

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

进程 = 资源管理 + 线程

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

线程 = 进程 – 资源管理

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

区别:

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

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


推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
  • 本文探讨了 C++ 中普通数组和标准库类型 vector 的初始化方法。普通数组具有固定长度,而 vector 是一种可扩展的容器,允许动态调整大小。文章详细介绍了不同初始化方式及其应用场景,并提供了代码示例以加深理解。 ... [详细]
  • 高效解决应用崩溃问题!友盟新版错误分析工具全面升级
    友盟推出的最新版错误分析工具,专为移动开发者设计,提供强大的Crash收集与分析功能。该工具能够实时监控App运行状态,快速发现并修复错误,显著提升应用的稳定性和用户体验。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
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社区 版权所有