【多线程】进程与线程 并发编程 面试题总结

news2024/10/7 16:17:12

进程和线程

  • 进程是程序执行时的一个实例,即它是程序已经执行到何种程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。
  • 线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
  • 一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构)
  • 线程与同属一个进程的其他的线程共享进程所拥有的全部资源。
  • “进程——资源分配的最小单位,线程——程序执行的最小单位”。
  • 进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
     

线程的出现

早期的CPU都是单核的,随着多核CPU的到来,多进程也随之出现,但在并发编程当中,多进程虽然效果也可以,但是也有缺点,进程太重量且效率不高(进程的创建与销毁,耗时,耗内存资源)。为了解决这一为题,就引入了"线程(Thread)"这一概念。线程不能独立存在,必须依附于进程,即进程包含线程。

进程是操作系统进行资源分配和调度的一个基本单位。资源包括CPU、内存、磁盘等IO设备等等。

线程与程序的区别

​ 程序:是静态的,存放在磁盘上的可执行文件
​ 进程:是动态的,是运行在内存中的程序的执行实例

​ 程序是一些指令的有序集合,而进程是程序执行的过程,进程是程序的一次执行过程。进程的状态是变化的,其包括进程的创建、调度和消亡。
​ 只要程序运行,此时就是进程,程序每运行一次,就会创建一个进程

 进程和线程的关系:

  1.   一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
  2.     资源分配给进程,同一进程的所有线程共享该进程的所有资源。
  3.     处理机分给线程,即真正在处理机上运行的是线程。
  4.     线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。      线程是指进程内的一个执行单元,也是进程内的可调度实体.
     

进程与线程的区别?(面试题)

  1. 进程是资源分配的基本单位,线程是调度执行的基本单位。
  2. 进程是包含进程的,一个进程里可以有一个或多个线程。
  3. 同一个进程的线程之间,公用同一份资源(内存+硬盘)如编程时同一个变量,省去了申请资源的开销。
  4. 进程和线程都是用来实现并发编程的,但是线程比进程更轻量。
  5. 进程与进程之间是相互独立的,不同进程的线程之间也是相互独立的,同一个进程的线程之间是相互影响的。

Java如何进行多线程编程?

线程是操作系统的概念。操作系统提供了一些API,可以操作线程。由于不同操作系统所提供的API不太相同,于是Java的JVM对这些操作系统所提供的API,统一进行了封装。使得我们在不同操作系统上用java进行多线程编程的时候,只需要使用一套API就可以了。即可跨平台。

在java中通过 Thread类 创建 Thread对象 ,就可以进一步操作 系统内部 的线程。

观察多线程情况

可以使用 IDEA 或 jconsole 观察,前提是多线程正在运行。以jconsole为例:

首先找到 jconsole ,存在于 JDK 的 bin 目录里。

通过idea的 File -> Project Settings -> SDKS 就可以找到JDK的路径了。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1059862.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

postgresql16-新特性

postgresql16-新特性 any_value数组抽样数组排序 any_value any_value 返回任意一个值 select e.department_id ,count(*), any_value(e.last_name) from cps.public.employees e group by e.department_id ;数组抽样 -- 从数组中随机抽取一个元素 array_sample(数组&#…

java的内存模型(概念)

在java中,设计之初就有了:主内存、线程工作内存,所以其实每一个线程执行时,都是将主线程copy一份到工作线程,执行修改后,再同步回去。 所以,就有四组内存操作方式: 1、读主内存&…

【python】数据加载与存储

文章目录 读取文本格式的数据逐块读取文本文件将数据写出到文本格式 读取文本格式的数据 pandas提供了一些用于将表格型数据读取为DataFrame对象的函数: 【read_csv和read_table最为重要】 这些函数在将文本数据转换为DataFrame时所用到的一些技术。这些函数的选项…

C++:stl:stack、queue、priority_queuej介绍及模拟实现和容量适配器deque介绍。

本文主要介绍c中stl的栈、队列和优先级队列并对其模拟实现,对deque进行一定介绍并在栈和队列的模拟实现中使用。 目录 一、stack的介绍和使用 1.stack的介绍 2.stack的使用 3.stack的模拟实现 二、queue的介绍和使用 1.queue的介绍 2.queue的使用 3.queue的…

Vue中如何进行分布式路由配置与管理

Vue中的分布式路由配置与管理 随着现代Web应用程序的复杂性不断增加,分布式路由配置和管理成为了一个重要的主题。Vue.js作为一种流行的前端框架,提供了多种方法来管理Vue应用程序的路由。本文将深入探讨在Vue中如何进行分布式路由配置与管理&#xff0…

【kubernetes】kubernetes中的Controller

1 什么是Controller? kubernetes采用了声明式API,与声明式API相对应的是命令式API: 声明式API:用户只需要告诉期望达到的结果,系统自动去完成用户的期望命令式API:用户需要关注过程,通过命令一…

EdgeView 4 for Mac:重新定义您的图像查看体验

您是否厌倦了那些功能繁杂、操作复杂的图像查看器?您是否渴望一款简单、快速且高效的工具,以便更轻松地浏览和管理您的图像库?如果答案是肯定的,那么EdgeView 4 for Mac将是您的理想之选! EdgeView 4是一款专为Mac用户…

【C语言】结构体内存对齐

结构体内存对齐是很重要的一个考点,但不难掌握,接下来就来了解一下结构体内存对齐 目录 对齐规则:偏移量:例题:为什么存在内存对齐? 对齐规则: 首先来看一下对齐规则 第一个成员在与结构体变量偏移量为0…

交叉编译和GCC编译器

目录 交叉编译 hello.c文件 提问 GCC编译器 GCC编译过程 GCC常用选项 编译多个文件 预处理 编译 汇编 链接 交叉编译 hello.c文件 #include <stdio.h>int main(int argc, char argv) {if(argc > 2)printf("Hello, %s!\n", argv[1]);elseprintf…

【Spring Boot】创建一个 Spring Boot 项目

创建一个 Spring Boot 项目 1. 安装插件2. 创建 Spring Boot 项目3. 项目目录介绍和运行注意事项 1. 安装插件 IDEA 中安装 Spring Boot Helper / Spring Assistant / Spring Initializr and Assistant插件才能创建 Spring Boot 项⽬ &#xff08;有时候不用安装&#xff0c;直…

JVM:如何通俗的理解并发的可达性分析

并发的可达性分析 前面在介绍对象是否已死那一节有说到可达性分析算法&#xff0c;它理论上是要求全过程都基于一个能保障一致性的快照&#xff08;类比 MySQL 的MVCC&#xff09;中才能够进行分析&#xff0c;也就意味着必须全程冻结用户线程的运行&#xff08;STW&#xff0…

实战型开发1/3--结果业务导向

假期难得一段时间把近期一些实战型开发的阅读&#xff0c;实践做一些小结&#xff1b; 风格方面就是包括不限于一些好的开发实践&#xff0c;nb的开发技术流程等&#xff0c;但是总体着力于实战型的开发&#xff1b; 三层视角 业务&团队视角&#xff1a;开发所要最终服务…

单调栈---基础数据结构与算法

简介 栈 (stack) 又名堆栈&#xff0c;是一种数据结构&#xff0c;向一个栈插入新元素又称作进栈、入栈或压栈&#xff0c;从一个栈删除元素又称作出栈或退栈。 栈是一种只允许在表尾进行插入和删除操作的线性表&#xff0c;也就是我们所说的后进先出&#xff0c;我们把栈想象…

软件测试工程师经典面试题,金九银十可以跳槽了。

大家好&#xff0c;前两天跟朋友感慨&#xff0c;今年的铜九铁十、裁员、导致好多人都没拿到offer&#xff01;现在互联网大厂终于迎来了应届生集中求职季。 对于想跳槽的职场人来说&#xff0c;绝对是个找工作的好时机。这时候&#xff0c;很多高薪技术岗、管理岗的缺口和市场…

想要精通算法和SQL的成长之路 - 并查集的运用和案例(省份数量)

想要精通算法和SQL的成长之路 - 并查集的运用 前言一. 并查集的使用和模板1.1 初始化1.2 find 查找函数1.3 union 合并集合1.4 connected 判断相连性1.5 完整代码 二. 运用案例 - 省份数量 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 并查集的使用和模板 先说一下并查集…

记住这份软件测试八股文还怕不能拿offer?你值得拥有

前言 2023秋招即将来临&#xff0c;很多同学会问软件测试面试八股文有必要背吗&#xff1f; 我的回答是&#xff1a;很有必要。你可以讨厌这种模式&#xff0c;但你一定要去背&#xff0c;因为不背你就进不了大厂。 国内的互联网面试&#xff0c;恐怕是现存的、最接近科举考试…

计算机竞赛 车道线检测(自动驾驶 机器视觉)

0 前言 无人驾驶技术是机器学习为主的一门前沿领域&#xff0c;在无人驾驶领域中机器学习的各种算法随处可见&#xff0c;今天学长给大家介绍无人驾驶技术中的车道线检测。 1 车道线检测 在无人驾驶领域每一个任务都是相当复杂&#xff0c;看上去无从下手。那么面对这样极其…

【MySQL】表的约束(一)

文章目录 为什么要有约束一. 空属性二. 默认值三. 列描述四. zerofill结束语 为什么要有约束 数据库是用来存放数据的&#xff0c;所以其需要保证数据的完整性和可靠性 数据类型也算是一种约束&#xff0c;比如&#xff0c;整型的数据无法插入字符型。 通过约束&#xff0c;让…

超详细!手把手带你实现一个完整的Promise

Promise是JavaScript中异步编程的解决方案&#xff0c;一开始在社区中提出和实现&#xff0c;后来ECMAScript将其写进了标准中。Promise有效的解决了异步编程的回调地狱问题&#xff0c;非常受开发者的欢迎。 本文首先介绍了JavaScript中异步编程的几种方式&#xff0c;再对Pr…

Vue学习之页面上中下三层布局

Vue学习之页面上中下三层布局 页面布局&#xff1a;头部&#xff0c;内容区&#xff0c;尾部&#xff0c;其中头部和尾部几乎所有页面都有&#xff0c;可抽成公共组件&#xff0c;内容区是可变的&#xff0c;由路由组件展示 页面效果 实现 &#xff08;1&#xff09;app.vue &…