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

【多线程】初识进程和线程

       

b50ffcc051264df7b69b2c41c025d66f.jpeg

        💐个人主页:初晴~

📚相关专栏:多线程 / javaEE初阶


前言

     在我们之前编写的所有代码,都只能用上一个核心。众所周知,现在大多数CPU都有多个核心,但此时,无论如法优化程序,最多也只有一个CPU核心在工作,其它的核心都空闲着,就容易出现所谓一核有难,多核围观的窘况。这时可以通过一些代码,把多个CPU核心都利用起来,提高运行效率,这样的编程就被称为“并发编程”。而提到并发编程就离不开多进程编程和多线程编程了。这篇文章就让我们先来认识一下进程与线程吧👀

2c994905f06d4cbe94a4ad7b8bfe688c.png

一、进程

1、概念

        进程是计算机中正在运行的程序的实例。它是操作系统进行资源分配和调度的基本单位。每个进程都有自己的内存空间代码数据执行状态。进程可以独立运行,相互之间不会干扰。操作系统可以同时运行多个进程,通过分配时间片轮流执行它们,从而实现多任务处理。进程可以与其他进程进行通信和协作,共享资源和数据。

8cc0ee12a5eb4940b5c776445036b342.png

像上图中显示的就是正在运行的程序,也就是一个个系统分配的进程

2、特性

进程的特性:

动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。
并发性:任何进程都可以同其他进程一起并发执行
独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;
异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进
结构特征:进程由程序、数据和进程控制块(PCB)三部分组成;

3、组织形式

一个可执行程序,运行的时候,操作系统就会创建进程,给这个程序分配各种系统资源(CPU,内存,硬盘,网络带宽等……),所谓的进程,在系统中是通过PCB(process control block)这样的结构体来描述的,通过双显链表的形式来组织,简单来说就是“先描述,再组织”的形式

描述进程:使用PCB结构体描述进程的各种属性

操作系统会进行两步:

  • 为该进程创建对应的PCB对象
  • 将该进程的代码和数据加载在内存中

PCB就相当于是进程属性的集合,主要描述了以下属性:

  • 标示符PID:    描述本进程的唯一标示符,用来区别其他进程
  • 状态:    任务状态,退出代码,退出信号等。
  • 优先级:    相对于其他进程的优先级。
  • 程序计数器`:    程序中即将被执行的下一条指令的地址。
  • 内存指针:    包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
  • 上下文数据:    进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
  • I/O状态信息:    包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
  • 记账信息:    可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
  • 组织进程:通过双显链表,将各进程的PCB串联起来

通过PCB,操作系统就可以更好地去管理各个进程,操作时不需要获取整个进程,只需获取描述进程的PCB对象,就可以找到相对应的代码与数据,从而大幅节省空间开销,提高效率。

二、线程

        虽然多进程方式能够实现并发编程,但是效率要求的提高,就希望有更好的方式来实现。多进程编程最大的问题就是太“重”了,创建进程和销毁进程的空间开销与时间开销都比较大,一旦需求场景中需要频繁创建销毁进程时,效率就非常低了。为了解决进程开销较大的问题,就发明了相对轻量化的线程

线程比进程更加轻量化,主要是因为创建线程,省去了“分配资源”的过程,销毁线程,也省去了“释放资源”的过程。

一旦进程创建,同时就会创建好第一个线程,并分配好系统资源,后续该进程创建更多线程时,就不需要再分配资源了。

        举个例子,假设系统要执行的任务是吃掉100块肉,这时系统就会创建一个进程,并为这个进程分配一定资源,我们这里看作是为任务执行而开辟了一个“房间”,然后这个进程会创建一个线程“路飞”来真正去完成工作,也就是说实际上真正完成工作的是线程,进程是为线程工作提供了一定资源,图中类比为了一个房间

fd20369675ff4fd084370bfc4189f666.png

        这时我们就有两种方法来提高工作效率,第一种,系统在开辟一个“房间”,这时每个房间要吃的肉的数量就变少了,又因为每个进程的工作是独立且并行的,每个进程的工作量减少,总的工作效率也就提升了,这就是多进程编程的原理:

9449dc61005b42d08263fb923dd30199.png

        但是,创建一个新的“房间”的开销是很大的,所以,为了提高效率,我们可以在一个房间里放入多个“路飞”来完成工作,这些“路飞”在同一个“房间”工作,共用同一份资源,同时去吃桌上的肉,这样每个“路飞”所需要吃的肉大幅减少,又因为他们可以看作是同时去吃的,总的效率就能提升很多了,这便是多线程编程的原理:

ca085ed24a7d4776bdbde08e64d423b7.png

但是,只有靠近桌子的“路飞”才能吃上肉,桌子的大小是有限的(进程资源有限),随着“路飞”数量的增加,可能会有大量“路飞”(线程)靠近不了桌子(分配不到资源),从而无法进行工作,造成线程的闲置,这时,再一味地增加线程就不能够提高效率了,并且由于创建线程也是有开销的,此时过多的线程反而可能会降低运行效率。

46666263f2414fe3b8d862fe4a22fd82.png

因此,线程并不是越多越好的,在使用是一定要控制好线程数量


三、进程与线程区别与关系

1、进程包含线程

一个进程可以有一个线程或者多个线程,但不能没有线程

2、进程是系统资源分配的基本单位,线程是系统调度执行的基本单位

3、同一份进程中的线程共用一份系统资源(内存,硬盘,网络带宽等……)

内存资源就是代码中定义的变量与对象,多个线程是可以是可以共用同一份变量的

4、线程是当下实现并发编程的主流方式,通过多线程可以更好地利用多核CPU,但线程并不是越多越好的,线程数目达到一定量后,已经充分利用了多核CPU的性能,此时在一味地增加线程数量,不但无法提高运行效率,反而可能还会影响效率,因为线程调度也是需要消耗资源的。

5、多个线程之间可能会互相影响,一个线程抛出异常会影响其它线程的正常运行,这会导致各种线程安全问题

6、多个进程之间,一般不会互相影响,一个进程崩了也不会影响其它进程,也被称为“进程的隔离性”


总结

总之,比起以前写的程序,多线程编程的方法能更好地发挥多核CPU的性能,大幅提高运行效率,在将来工作中也是非常重要的。本篇文章我们主要简单介绍了进程与线程的关系与区别

那么本篇文章就到此为止了,如果觉得这篇文章对你有帮助的话,可以点一下关注和点赞来支持作者哦。作者还是一个萌新,如果有什么讲的不对的地方欢迎在评论区指出,希望能够和你们一起进步✊

e1fd69ccbcb64f59b2aaed6be3f8695f.png

 

 

相关文章:

【多线程】初识进程和线程

💐个人主页:初晴~ 📚相关专栏:多线程 / javaEE初阶 前言 在我们之前编写的所有代码,都只能用上一个核心。众所周知,现在大多数CPU都有多个核心,但此时,无论如法优化程序&#xff0c…...

1DCNN-2DResNet并行故障诊断模型

往期精彩内容: Python-凯斯西储大学(CWRU)轴承数据解读与分类处理 Python轴承故障诊断入门教学-CSDN博客 Python轴承故障诊断 (13)基于故障信号特征提取的超强机器学习识别模型-CSDN博客 Python轴承故障诊断 (14)高创新故障识别模型-CSDN…...

Java设计模式(原型模式)

定义 使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象。 角色 Prototype(抽象原型角色) ConcretePrototype(具体原型角色) Client(客户端角色 优点 简化对象的创建过程&#xff0c…...

C/C++ 知识点:typedef 关键字

文章目录 一、typedef 关键字1、 基本用法2、常见用法2.1、为基本数据类型定义别名2.2、为结构体或联合体定义别名2.3、为指针类型定义别名2.4、为复杂模板类型定义别名 3、注意事项4、总结 前言: 在C(以及C语言)中,typedef 关键字…...

【Linux学习】进程间通信之 匿名管道 与 基于管道的进程池

🍑个人主页:Jupiter. 🚀 所属专栏:Linux从入门到进阶 欢迎大家点赞收藏评论😊 目录 🍑进程间通信🐬进程间通信目的 📚管道 📕管道的原理🐧用fork来共享管道原…...

小团队如何选需求管理软件?8款顶级推荐

本文将分享8款适合小团队的需求管理软件:PingCode、Worktile、Tapd、Teambition、禅道、Asana、Jama Connect、Aha!。 在小团队中管理需求时,寻找合适的软件工具常常让人头疼,不同的需求管理软件提供各种功能,但哪些功能真正适合…...

docker操作入门

1.创建镜像,使用当前文件 docker build -t experience . 2.运行容器 docker run -d -p 8501:8501 --name my-running-app my-python-api docker run -p 8508:8508 experience docker run -p 8508:8508 -p 8509:8509 experience 3.查看容器状态 docker ps docker p…...

简单的射箭小游戏网页源码

简单的射箭小游戏网页源码,对准靶心开启你的射击之旅吧 微信扫码免费获取源码...

Python | Leetcode Python题解之第331题验证二叉树的前序序列化

题目: 题解: class Solution:def isValidSerialization(self, preorder: str) -> bool:pre 1for i in preorder.split(,):if i.isdigit():if pre 0:return Falsepre 1else:if pre 0:return Falsepre - 1return pre 0...

0x3 “护网行动”守之道

一、护网防守目标系统 二、护网防守之利器 通过安全流程控制、安全技术保障、安全工具支撑、安全能力提升四个层次全面构成安全防御体系。 安全技术名称解释 IPS(入侵防御系统)WAF(Web应用防火墙)IDS(入侵检测系统&a…...

白骑士的Matlab教学高级篇 3.1 高级编程技术

系列目录 上一篇:白骑士的Matlab教学进阶篇 2.5 Simulink 高级编程技术在MATLAB中扮演着至关重要的角色,帮助用户更高效地编写复杂程序、提高代码的可维护性和可读性。本节将介绍面向对象编程、函数句柄与回调函数、错误处理与调试的相关内容。 面向对…...

haproxy简介与用法

一、负载均衡 1.1、概念: 负载均衡SLB(Server Load Balancer)是一种对流量进行按需分发的服务,通过将流量分发到不同的后端服务来扩展应用系统的服务吞吐能力,并且可以消除系统中的单点故障,提升应用系统…...

Geoscene Pro的三维

一、场景设置 1.3D视图分为全局场景和局部场景。在Geoscene Pro中,两个场景可以自由切换。 (1)全局场景有固定的坐标系GCS(WGS84、CGCS2000),并在全球比例尺下展示(全球范围)。可以…...

论文阅读 - Scaling Up k-Clique Densest Subgraph Detection | SIGMOD 2023

1. 论文背景 密集子图发现(Densest Subgraph Discovery)是图挖掘领域的一个基础研究方向,并且近年来在多个应用领域得到了广泛研究。特别是在生物学、金融学和社交网络分析等领域,密集子图的发现对理解复杂网络结构和行为具有重要…...

前端框架(三件套)

学习网站 HTML 系列教程&#xff08;有广告&#xff09; HTML&#xff08;超文本标记语言&#xff09; | MDN (mozilla.org)&#xff08;英文不太友好&#xff09; 1.HTML5 & CSS3 1.1HTML5表格 <!DOCTYPE html> <html lang"en"> <head>…...

MemoryCache 缓存 实用

MemoryCache 缓存 实用,相关逻辑代码里已详细注释&#xff0c; 在Java中创建一个单例模式&#xff08;Singleton Pattern&#xff09;的MyMemoryCache类&#xff0c;可以采用多种方法&#xff0c;其中最常见的是使用“饿汉式”和“懒汉式”&#xff08;线程安全和非线程安全&am…...

Java设计模式(命令模式)

定义 将一个请求封装为一个对象&#xff0c;从而让你可以用不同的请求对客户进行参数化&#xff0c;对请求排队或者记录请求日志&#xff0c;以及支持可撤销的操作。 角色 抽象命令类&#xff08;Command&#xff09;&#xff1a;声明用于执行请求的execute方法&#xff0c;通…...

什么是 CI/CD?

什么是 CI/CD&#xff1f; CI/CD&#xff08;Continuous Integration/Continuous Deployment&#xff09;是一种软件开发实践&#xff0c;旨在通过自动化的方式频繁地构建、测试和发布软件。CI/CD 可以显著提高软件交付的速度和质量&#xff0c;使团队能够更快地响应市场变化和…...

【免费】最新区块链钱包和私钥的助记词碰撞器,bybit使用python开发

使用要求 1、用的是google里面的扩展打包成crx文件&#xff0c;所以在使用之前你需要确保自己电脑上有google浏览器&#xff0c;而且google浏览器版本需要在124之上。&#xff08;要注意一下&#xff0c;就是电脑只能有一个Chrome浏览器&#xff09; 2、在win10上用vscode开发…...

【苍穹外卖JAVA项目】第2天:新增员工

在EmployeeMapper.java中插入数据&#xff1a;一、新增员工 1.产品原型 2.接口设计 由于需要提交员工信息&#xff0c;用post请求方式&#xff0c;可以携带json数据 3.设计数据库的employee表 4.设计DTO 数据传输对象&#xff08;DTO&#xff09;&#xff1a;封装前端提交过…...

队列的实现及循环队列

一、队列的概念及结构 队列只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表。队列具有先进先出FIFO&#xff08;Fist In First Out&#xff09;。 入队列&#xff1a;进行插入操作的一端称为队尾。 出队列&#xff1a;进行删除操作的一端称为…...

docker部署zookeeper和kafka

docker部署zookeeper和kafka zookeeperkafkakafka-eagle zookeeper firewall-cmd --zonepublic --add-port2181/tcp --permanent firewall-cmd --reload docker pull zookeeper:3.4.14 docker run -d --name zk -p 2181:2181 zookeeper:3.4.14mkdir -p /root/zookeeper/data m…...

(13)zabbix的监控-1

前言&#xff1a;在上一次的基础上&#xff0c;完成实验。 1、添加一个空模板&#xff0c;方便 2、添加空模板到主机192.168.121.50 client-one里面模板是空的 4、在主机添加监控项和图形 5、自定义监控项&#xff0c;在客户端定义 [rootclient1 ~]# vim /etc/zabbix/zabbix_…...

Redis相关面试题(二)

一、Bit中不同命令使用的场景 二、什么是缓存击穿&#xff0c;缓存穿透&#xff0c;缓存雪崩&#xff1f; 缓存击穿&#xff1a;是指当某一个key的缓存过期时大并发量的请求同时访问key&#xff0c;瞬间击穿服务器直接访问到数据库&#xff0c;使得数据库处于负载情况 缓存穿透…...

Docker Compose与私有仓库

Docker Compose与私有仓库 docker-compose -v 查看版本信息 Docker Compose的应用 创建APACHE容器 vim docker-compose.yaml yaml文件缩进严格&#xff1b;冒号后有内容需要加空格&#xff0c;冒号后无内容一般不加空格 冒号后的内容中若包含路径‘/’或‘&#xff1a;’时…...

AI学习记录 - gpt如何进行token化,理论知识,以GPT2为举例

AI学习记录已经发了十几篇&#xff0c;大佬们可以看看&#xff0c;如果有帮助动动小手点赞 token入门版&#xff0c;有空会更新具体代码操作 GPT4当中&#xff0c;我们提问问题是按照token进行扣费的&#xff0c;那到底什么是token&#xff1f; 在不同的语言模型当中&#x…...

Java线程池和执行流程

在 Java 中&#xff0c;常见的四种线程池包括&#xff1a; 1. newFixedThreadPool&#xff08;固定大小线程池&#xff09; 应用场景&#xff1a;适用于需要限制线程数量&#xff0c;并且任务执行时间比较均匀的场景&#xff0c;例如服务器端的连接处理。优点&#xff1a;线程数…...

进程信号的产生与处理

目录 前言 一.信号的概念 二.信号的产生 1.键盘产生 2.系统调用 3.软件条件 4.异常 三.信号的保存 四.信号的处理 信号处理的方式 设定屏蔽信号 自定义处理信号 信号处理的时机 前言 进程信号&#xff08;Process Signals&#xff09;是操作系统与运行进程之间进行通…...

统一响应结果封装,Result类的实现【后端 06】

统一响应结果封装&#xff0c;Result类的实现 在开发Web应用或API接口时&#xff0c;如何优雅地处理并返回响应结果是每个开发者都需要考虑的问题。统一响应结果封装&#xff08;Unified Response Encapsulation&#xff09;作为一种广泛采用的实践&#xff0c;不仅提高了API的…...

明日周刊-第20期

本周异形新电影上映&#xff0c;开始期待起来了&#xff0c;毕竟这是一个经久不衰的ip。还有就是马上来临的黑神话悟空&#xff0c;属于我们自己的3A大作&#xff0c;接下去的每一天都是新的期待。 文章目录 科技短讯资源分享随便说说一点心情 科技短讯 科技创新与突破 人工智…...