当前位置: 首页 > news >正文

进程和线程( Process and Thread)

目录

一、操作系统(Operating System)

 操作系统的定位

二、 什么是进程/任务(Process/Task)

1.进程控制块抽象(PCB Process Control Block)

2.PCB中重要的属性

 3.并发编程

 三、线程(Thread)

1. 线程是什么

2、为啥要有线程

三、进程和线程的区别

四、Java 的线程 和 操作系统线程 的关系


一、操作系统(Operating System

      操作系统是一组做计算机资源管理的软件的统称。目前常见的操作系统有:Windows系列、Unix系列、 Linux系列、OSX系列、Android系列、iOS系列、鸿蒙

 操作系统的定位

         

操作系统由两个基本功能:
  1. 防止硬件被时空的应用程序滥用;
  2.  向应用程序提供简单一致的机制来控制复杂而又通常大相径庭的低级硬件设备。

二、 什么是进程/任务(Process/Task

        进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程; 同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。

1.进程控制块抽象(PCB Process Control Block)

    计算机内部要管理任何现实事物,都需要将其抽象成一组有关联的、互为一体的数据。在 Java 语言中, 我们可以通过类/对象来描述这一特征。

2.PCB中重要的属性

       这样,每一个 PCB 对象,就代表着一个实实在在运行着的程序,也就是进程。

        操作系统再通过这种数据结构,例如线性表、搜索树等将 PCB 对象组织起来,方便管理时进行增删查改 (CURD)的操作。

 3.并发编程

        (1)若只有一个CPU核心,则采用轮转调度的方式,依次执行多个进程,宏观上“同时进行”,微观上“先后进行”,称为“并发”。

        (2)若有多个CPU核心,则同时执行,称为“并行”。 

 三、线程(Thread)

1. 线程是什么

        一个线程就是一个 "执行流". 每个线程之间都可以按照顺讯执行自己的代码. 多个线程之间 "同时" 执行 着多份代码。

2、为啥要有线程

首先, "并发编程" 成为 "刚需".

       单核 CPU 的发展遇到了瓶颈. 要想提高算力, 就需要多核 CPU. 而并发编程能更充分利用多核 CPU 资源. 有些任务场景需要 "等待 IO", 为了让等待 IO 的时间能够去做一些其他的工作, 也需要用到并发编程.

其次, 虽然多进程也能实现 并发编程, 但是线程比进程更轻量.

  1.   创建线程比创建进程更快.
  2.   销毁线程比销毁进程更快.
  3.    调度线程比调度进程更快.

最后, 线程虽然比进程轻量, 但是人们还不满足, 于是又有了 "线程池"(ThreadPool) "协程"

(Coroutine)

三、进程和线程的区别

  1. 进程是包含线程的. 每个进程至少有一个线程存在,即主线程。
  2. 进程和进程之间不共享内存空间. 同一个进程的线程之间共享同一个内存空间,(创建新的线程不需要开辟资源空间
  3. 进程是系统分配资源的最小单位,线程是系统调度的最小单位。
  4. 都可以实现“并发编程”,线程更为高效。
  5. 进程之间是相互独立,线程之前可能相互影响(线程安全性,线程异常)。

四、Java 的线程 和 操作系统线程 的关系

        线程是操作系统中的概念. 操作系统内核实现了线程这样的机制, 并且对用户层提供了一些 API 供用户使用(例如 Linux pthread ). Java 标准库中 Thread 类可以视为是对操作系统提供的 API 进行了进一步的抽象和封装.类似(JDBC).

                         

        结语:进程和线程的相关分享到这里就结束了,希望对大家的学习会有帮助,如果大家有什么问题或者不同的见解,欢迎大家评论区的留言, 感谢支持 

相关文章:

进程和线程( Process and Thread)

目录 一、操作系统(Operating System) 操作系统的定位 二、 什么是进程/任务(Process/Task) 1.进程控制块抽象(PCB Process Control Block) 2.PCB中重要的属性 3.并发编程 三、线程(Thread) 1. 线程是…...

linux apache安装及虚拟主机配置

centos 安装apache&#xff0c; yum install httpd 将httpd.conf中的ServerName 前面的 # 去掉。 apache 2.2 的虚拟机的配置放置在conf/extra/httpd-vhosts.conf 中 apache 虚拟主机设置 a2enmod rewrite sudo vim 000-default 修改 ServerName *:80 <VirtualHost *…...

基于Spring Boot 框架的试卷自动生成系统的设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。你想解决的问题&#xff0c;今天给大家介绍…...

开发《猫咪攻略》小游戏的意义

开发《猫咪攻略》小游戏的意义有以下几点&#xff1a; 学习和掌握游戏开发的基本技能&#xff1a;通过开发《猫咪攻略》小游戏&#xff0c;可以学习和掌握游戏开发的基本技能&#xff0c;包括游戏策划、游戏设计、游戏编程和游戏测试等方面的技能。增强对猫咪的了解和认识&…...

hadoop、hive、DBeaver的环境搭建及使用

本文主要介绍hadoop、hive的结构及使用&#xff0c;具体的操作步骤见最后的附件&#xff1b; hadoop提供大数据的存储、资源调度、计算&#xff0c;分为三个模块&#xff1a;HDFS、YRAN、MapReduce HDFS提供数据的分布式存储&#xff0c;分为三个节点NameNode,DataNode,Second…...

Linux上通过SSL/TLS和start tls连接到LDAP服务器(附C++代码实现认证流程)

一&#xff0c;大致流程。 1.首先在Linux上搭建一个LDAP服务器 2.在LDAP服务器上安装CA证书&#xff0c;服务器证书&#xff0c;因为SSL/TLS&#xff0c;start tls都属于机密通信&#xff0c;需要客户端和服务器都存在一个相同的证书认证双方的身份。3.安装phpldapadmin工具&am…...

HarmonyOS ArkTS List组件和Grid组件的使用(五)

简介 ArkUI提供了List组件和Grid组件&#xff0c;开发者使用List和Grid组件能够很轻松的完成一些列表页面。常见的列表有线性列表&#xff08;List列表&#xff09;和网格布局&#xff08;Grid列表&#xff09;&#xff1a; List组件的使用 List是很常用的滚动类容器组件&…...

考研思想政治理论大纲

一:马克思主义基本原理概论 (一)马克思主义是关于无产阶级和人类解放的科学 1、马克思主义的创立和发展 马克思主义的含义。马克思主义产生的经济社会根源、实践基础和思想渊源、马克思主义的创立、马克思主义在实践中的发展 2、马克思主义的鲜明特征 马克思主义科学性和革命…...

日期格式转化成星期几部署到linux显示英文

异常收集 原因&#xff1a;解决办法仰天大笑出门去&#xff0c;我辈岂是蓬蒿人 传入一个时间获取这个时间对应的是星期几&#xff0c;在开发环境&#xff08;window系统&#xff09;中显示为星期几&#xff0c;部署到服务器&#xff08;linux系统&#xff09;中会显示英文的时间…...

一个关于proto 文件的经验分享 :gRPC 跨语言双端通信显示错误码:12 UNIMPLEMENTED (附赠gRPC错误码表)

错误现象描述&#xff1a; 在使用c的客户端向golang的服务端发送远程调用时&#xff0c;显示&#xff1a; /home/zry/gRPC/grpc-v1.45.2/examples/cpp/DeviceData/greeter_client.cc83 12: unknown service DeviceData.DeviceDataService Greeter 接收到: RPC 失败这里的unkn…...

腾讯极光盒子A4021增强版_线刷官方

1、用USB_Burning_Tool线刷提供的线刷包,所需资料地址在最后 1)打开USB_Burning_Tool,选择资料里的A4021_line_flash_root.img(文件夹最好没有中文字符和空格),然后点击【开始】。 2)盒子准备好双USB线和电源。在1秒内先插入电源,再插入usb口。等这个软件识别到盒子,…...

机器学习第11天:降维

文章目录 机器学习专栏 主要思想 主流方法 投影 二维投射到一维 三维投射到二维 流形学习 PCA主成分分析 介绍 代码 内核PCA 具体代码 LLE 结语 机器学习专栏 机器学习_Nowl的博客-CSDN博客 主要思想 介绍&#xff1a;当一个任务有很多特征时&#xff0c;我们…...

异步爬取+多线程+redis构建一个运转丝滑且免费http-ip代理池 (三)

内容提要: 如果说,爬取网页数据的时候,我们使用了异步,那么将数据放入redis里面,其实也需要进行异步;当然,如果使用多线程或者redis线程池技术也是可以的,但那会造成冗余; 因此,在测试完多线程redis搭配异步爬虫的时候,我发现效率直接在redis这里被无限拉低下来! 因此: 最终的r…...

VSCode新建Vue项目

前言 Vue.js 是一款流行的 JavaScript 前端框架&#xff0c;它可以帮助开发者轻松构建高性能、可扩展的 Web 应用程序。而 VSCode 则是一款功能强大的开源代码编辑器&#xff0c;它提供了许多有用的工具和插件&#xff0c;可以大幅提高开发效率。 在本文中&#xff0c;我们将…...

前端学习--React(1)

一、React简介 React由Meta公司研发&#xff0c;是一个用于 构建Web和原生交互界面的库 优势&#xff1a;组件化开发、不错的性能、丰富生态&#xff08;所有框架中最好&#xff09;、跨平台&#xff08;web、ios、安卓&#xff09; 开发环境搭建 打开相应文件夹 新建终端并…...

HarmonyOS从基础到实战-高性能华为在线答题元服务

最近看到美团、新浪、去哪儿多家互联网企业启动鸿蒙原生应用开发&#xff0c;这个HarmonyOS NEXT越来越引人关注。奈何当前不面向个人开发者开放&#xff0c;但是我们可以尝试下鸿蒙新的应用形态——元服务的开发。 元服务是基于HarmonyOS提供的一种面向未来的服务提供方式&…...

OpenCV快速入门:窗口交互

文章目录 前言一、鼠标操作1.1 鼠标操作简介1.2 鼠标事件类型&#xff08;event类型&#xff09;1.3 鼠标事件标志&#xff08;flags&#xff09;1.4 代码示例1.4.1 获取鼠标坐标位置1.4.2 监听鼠标滚轮事件1.4.3 在图像中显示鼠标坐标 二、键盘操作2.1 代码示例2.2 waitKey的等…...

数据智能引擎:企业模糊搜索API精准获取企业列表信息

引言 随着信息时代的迅速发展&#xff0c;数据变得愈加庞大和复杂。在这个大数据的时代&#xff0c;企业面临着海量信息的管理和利用挑战。为了更有效地获取并利用数据&#xff0c;企业信息模糊搜索API成为了企业数据智能引擎的一部分&#xff0c;为企业提供了精准的企业列表检…...

汇编-间接寻址(处理数组)

直接寻址很少用于数组处理&#xff0c;因为用常数偏移量来寻址多个数组元素时&#xff0c;直接寻址并不实用。取而代之的是使用寄存器作为指针(称为间接寻址(indirect addressing) ) 并控制该寄存器的值。如果一个操作数使用的是间接寻址&#xff0c; 就称之为间接操作数(indie…...

lombok 的使用讲解

目录 前言1. 基本知识2. 代码应用 前言 在项目中经常会看到lombok的应用&#xff0c;此文作为科普帖&#xff0c;详细介绍lombok 1. 基本知识 简介&#xff1a; Project Lombok是一款用于Java开发的工具&#xff0c;旨在通过自动生成样板代码来简化Java代码的编写。 它通过注…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...

怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)

+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...