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

news/2024/10/29 7:20:43/

进程和线程

  • 进程是程序执行时的一个实例,即它是程序已经执行到何种程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(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.ppmy.cn/news/1142033.html

相关文章

zookeeper入门篇之分布式锁

文章目录 前言非公平锁公平锁 前言 上一篇说过,zookeeper是一个类似文件系统的数据结构,每个节点都可以看做是一个文件目录,也就是说,我们所创建的节点是唯一的,那么分布式锁的原理就是基于这个来的。 代码仓库&…

React Hooks—— context hooks

什么是Hooks Hooks从语法上来说是一些函数。这些函数可以用于在函数组件中引入状态管理和生命周期方法。 React Hooks的优点 简洁 从语法上来说,写的代码少了上手非常简单 基于函数式编程理念,只需要掌握一些JavaScript基础知识与生命周期相关的知识不…

【数据结构--八大排序】之快速排序

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

【MySQL】Linux 中 MySQL 环境的安装与卸载

文章目录 Linux 中 MySQL 环境的卸载Linux 中 MySQL 环境的安装 Linux 中 MySQL 环境的卸载 在安装 MySQL 前,我们需要先将系统中以前的环境给卸载掉。 1、查看以前系统中安装的 MySQL rpm -qa | grep mysql2、卸载这些 MySQL rpm -qa | grep mysql | args yum …

笔记--总线舵机YB-SD15M--stm32

文章目录 前言一、官方文档的理解1.发送格式2.命令地址 二、控制文件1.c2.h 文件 前言 使用stm32控制这个总线舵机。 舵机为总线舵机。一定要配合控制板一起用,不然只使用stm32无法控制。 一、官方文档的理解 1.发送格式 发送格式如下,其中的指令类型…

从0开始python学习-28.selenium 需要图片验证的登录

url https://test.com/login driver.get(url) # 获取登录页面需要输入账号密码进行模拟登录操作 user driver.find_element(By.XPATH,//*[id"login"]/div[2]/div/form[2]/div[2]/div/div/input).send_keys(username) pwd driver.find_element(By.XPATH,//*[id&qu…

SpringBoot vue云办公系统

SpringBoot vue云办公系统 系统功能 云办公系统 登录 员工资料管理: 搜索员工 添加编辑删除员工 导入导出excel 薪资管理: 工资账套管理 添加编辑删除工资账套 员工账套设置 系统管理: 基础信息设置 部门管理 职位管理 职称管理 权限组管理 操作员管理 开发环境和技术 开发语…

react函数式组件的useEffect

useEffect 1.useEffect的介绍 引用官网的一句话就是:useEffect 就是一个 Effect Hook,给函数组件增加了操作副作用的能力。(你之前可能已经在 React 组件中执行过数据获取、订阅或者手动修改过 DOM。我们统一把这些操作称为“副作用”&…