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

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

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

操作系统: 进程与线程

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

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

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

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

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

为什么要有进程?

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

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

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

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

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

什么是线程?

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

从资源组合的角度看:

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

从运行的角度看:

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

进程 = 资源管理 + 线程

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

线程 = 进程 – 资源管理

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

区别:

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

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


推荐阅读
  • 在 Linux 环境下,多线程编程是实现高效并发处理的重要技术。本文通过具体的实战案例,详细分析了多线程编程的关键技术和常见问题。文章首先介绍了多线程的基本概念和创建方法,然后通过实例代码展示了如何使用 pthreads 库进行线程同步和通信。此外,还探讨了多线程程序中的性能优化技巧和调试方法,为开发者提供了宝贵的实践经验。 ... [详细]
  • 性能测试中的关键监控指标与深入分析
    在软件性能测试中,关键监控指标的选取至关重要。主要目的包括:1. 评估系统的当前性能,确保其符合预期的性能标准;2. 发现软件性能瓶颈,定位潜在问题;3. 优化系统性能,提高用户体验。通过综合分析这些指标,可以全面了解系统的运行状态,为后续的性能改进提供科学依据。 ... [详细]
  • 本文总结了在SQL Server数据库中编写和优化存储过程的经验和技巧,旨在帮助数据库开发人员提升存储过程的性能和可维护性。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 探讨如何在Go语言中高效地处理大规模切片的去重操作,特别是针对百万级数据量的场景。 ... [详细]
  • 基于Linux开源VOIP系统LinPhone[四]
    ****************************************************************************************** ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • 单片机入门指南:基础理论与实践
    本文介绍了单片机的基础知识及其应用。单片机是一种将微处理器(类似于CPU)、存储器(类似硬盘和内存)以及多种输入输出接口集成在一块硅片上的微型计算机系统。通过详细解析其内部结构和功能,帮助初学者快速掌握单片机的基本原理和实际操作方法。 ... [详细]
  • 本文对SQL Server系统进行了基本概述,并深入解析了其核心功能。SQL Server不仅提供了强大的数据存储和管理能力,还支持复杂的查询操作和事务处理。通过MyEclipse、SQL Server和Tomcat的集成开发环境,可以高效地构建银行转账系统。在实现过程中,需要确保表单参数与后台代码中的属性值一致,同时在Servlet中处理用户登录验证,以确保系统的安全性和可靠性。 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • Java并发机制详解及其在数据安全性保障中的应用方案 ... [详细]
  • 深入解析Linux内核中的进程上下文切换机制
    在现代操作系统中,进程作为核心概念之一,负责管理和分配系统资源,如CPU和内存。深入了解Linux内核中的进程上下文切换机制,需要首先明确进程与程序的区别。进程是一个动态的执行流,而程序则是静态的数据和指令集合。进程上下文切换涉及保存当前进程的状态信息,并加载下一个进程的状态,以实现多任务处理。这一过程不仅影响系统的性能,还关系到资源的有效利用。通过分析Linux内核中的具体实现,可以更好地理解其背后的原理和技术细节。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • Python全局解释器锁(GIL)机制详解
    在Python中,线程是操作系统级别的原生线程。为了确保多线程环境下的内存安全,Python虚拟机引入了全局解释器锁(Global Interpreter Lock,简称GIL)。GIL是一种互斥锁,用于保护对解释器状态的访问,防止多个线程同时执行字节码。尽管GIL有助于简化内存管理,但它也限制了多核处理器上多线程程序的并行性能。本文将深入探讨GIL的工作原理及其对Python多线程编程的影响。 ... [详细]
  • 深入浅析JVM垃圾回收机制与收集器概述
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》的阅读心得进行整理,详细探讨了JVM的垃圾回收机制及其各类收集器的特点与应用场景。通过分析不同垃圾收集器的工作原理和性能表现,帮助读者深入了解JVM内存管理的核心技术,为优化Java应用程序提供实用指导。 ... [详细]
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社区 版权所有