多线程原理与实战【01 进程与线程】

Python 并发编程:多进程、多线程、GIL 锁与 ThreadLocal一览 阅读详情

进程与线程的基本原理、区别

进程的基本原理

进程的大致结构图:
进程的大致结构
一般来说,一个进程由程序段、数据段和进程控制块三部分组成。

程序段:是进程的程序指令在内存中的位置,包含需要执行的指令集合。
数据段:是进程的操作数据在内存中的位置,包含需要操作的数据集合。
进程控制块:主要包含了进程的描述和控制信息,是进程存在的唯一标志;包含以下四大部分:

1)进程的描述信息。主要包含::进程ID(唯一的,代表进程的身份)、进程名称、进程状态(运行、就绪、阻塞)、进程优先级(是进程调度的重要依据)

2)进程的调度信息。主要包含:程序的起始地址,程序的第一行指令的内存地址,从这里开始执行;通信信息,进程间通信时的消息队列。

3)进程的资源信息。主要包含:内存信息,内存占用情况和内存管理所用的数据结构;I/O设备信息,所用的I/O设备边么及相应的数据结构;文件句柄,所打开文件的信息。

4)进程上下文.。主要包含:执行时各种CPU寄存器的值、当前程序计数器的值以及各种栈的值。

线程的基本原理

线程的大致结构:
线程的大致结构
线程的基本信息:

  1. 线程ID(Thread ID ,即线程的标识符)。线程的唯一标识,同一个进程内不同的线程ID不一样。
  2. 线程名称。
  3. 线程优先级,表示线程调度的优先级,优先级越高,获得CPU的执行机会越大。
  4. 线程状态。表示当前线程的执行状态为新建、就绪、运行、阻塞、结束等状态中的一种。

实战部分:

package com.ryder.code;

public class ThreadInfo {
    public static void main(String[] args) {
        System.out.println("当前线程名称:" + Thread.currentThread().getName());
        System.out.println("当前线程id:" + Thread.currentThread().getId());
        System.out.println("当前线程状态:" + Thread.currentThread().getState());
        System.out.println("当前线程优先级:" + Thread.currentThread().getPriority());
    }
}

执行结果:

当前线程名称:main
当前线程id:1
当前线程状态:RUNNABLE
当前线程优先级:5

在java中,执行程序流程的重要单位是"方法",而栈内存的分配单位是栈帧,方法的每一次执行都需要为其分配一个栈帧。
栈帧:主要包含该方法的局部变量、方法的返回地址以及其他信息。
当线程的执行流程进入方法时,JVM就会为方法分配一个对应的栈帧压入栈内存,当线程的执行流程跳出方法,JVM就从栈内存弹出该方法的栈帧,此时栈帧的局部的变量的内存空间就会被回收。

package com.ryder.code;

public class ThreadInfo {
    public static void main(String[] args) {
        System.out.println("当前线程名称:" + Thread.currentThread().getName());
        System.out.println("当前线程id:" + Thread.currentThread().getId());
        System.out.println("当前线程状态:" + Thread.currentThread().getState());
        System.out.println("当前线程优先级:" + Thread.currentThread().getPriority());
        int a = 1, b = 1;
        int c = a / b;
        fun1();
    }

    private static void fun1(){
        int a = 1, b = 1;
        int c = a / b;
        fun2();
    }
    private static void fun2(){
        int a = 1, b = 1;
        int c = a / b;
    }
}

main线程在栈结构

调用FUN1

调用FUN2

进程与线程的区别

  1. 线程要进程代码段在一次顺序执行流程。一个进程由一个或多个线程组成,一个进程至少有一个线程。
  2. 线程是CPU调度在最小单位。进程是操作纱分配资源在最小单位。线程在划分尺度小于进程,因此多线程程序在并发性高。
  3. 线程是出于高并发在调度诉求从进程内部演进而来在。
  4. 进程之间椒独立在。线程之间共享方法区、堆内存、系统资源。
  5. 切换速度不同。线程快。
多线程比串行进程多出的优势在哪里 这里简单的做个类比:有一个大型工厂,该工厂负责生产玩具:同时工厂下又有多个车间,每个车间负责不同的功能,生产不同玩具的零件:每个车间里又有多个车间工人,这些工人互相合作,彼此共享资源来共同生产某个玩具零件等。这样,通过多线程和多进程,网络爬虫就能高效、快速的进行下去。同理,在一个进程中,程序的执行也是在不同线程间进行切换的,每个线程执行程序的不同部分。Python进行多进程爬虫使用了multiprocessing库,此处使用multiprocessing库的进程池方法进行多进程爬虫,使用方法的代码如下。 阅读详情

相关推荐

华为手机连接Win11失败?内核隔离与驱动签名冲突的终极解决指南

在Windows操作系统中,驱动程序是硬件与系统通信的桥梁,其数字签名机制是保障系统内核安全的核心防线。基于虚拟化的安全技术通过强制验证驱动签名,能有效隔离恶意代码,提升系统抵御高级威胁的能力。然而,严格的签名策略有时会与部分硬件驱动产生兼容性问题,导致设备无法识别,直接影响文件传输、应用调试等核心工作流。本文聚焦于华为手机在开启Windows 11内核隔离功能时出现的连接故障,深入剖析驱动签名验证与Hypervisor保护的代码完整性原理,并提供从驱动更新、策略调整到无线替代方案的完整解决路径,帮助用户在

weixin_31309419的博客 354

多线程原理和实战

java在高并发核心编程,线程的核心原理,实战

ITwolf的博客 302

告别RXTX:SpringBoot集成jSerialComm实现更现代的串口通信(附完整代码对比)

本文详细介绍了如何从传统的RXTX库迁移到jSerialComm,实现SpringBoot项目中更现代的串口通信。通过对比两种技术的依赖配置、API设计和跨平台支持,展示了jSerialComm在简化部署、提升性能和增强稳定性方面的优势,并提供了完整的代码示例和实战经验。

weixin_42522964的博客 286

多线程一(从实战入门到原理分析)

文章目录多线程一:线程和进程1.1:线程和进程的概述1.2:并发和并行的概述二:多线程实现2.1:继承Thread类2.2:实现Runnable接口2.3:实现Callable接口三:Thread类方法3.1:基本方法四:多线程内存图4.1:内存流程图4.2:总结:(多线程在内存中的执行顺序)五:线程安全问题5.1:为什么会出现线程安全问题5.2:解决线程安全5.2.1:同步代码块(synchronized);5.2.2:同步方法(synchronized);5.2.3:Lock琐;5.3:总结六:线程间通

郝竹本 246

从PSDK到ROS节点:实战GPS数据发布与CMake配置

本文详细介绍了如何从大疆PSDK获取GPS数据并封装为ROS节点的实战过程,包括PSDK编译、GPS数据订阅、ROS节点实现及CMake配置优化。通过具体代码示例和调试技巧,帮助开发者快速实现无人机传感器数据与ROS系统的集成,提升开发效率。

weixin_30843605的博客 458

保姆级教程:用Labelme标注车辆关键点,并一键转成YOLOv8-pose训练格式

本文提供了一份详细的车辆底盘关键点标注教程,从使用Labelme进行标注到一键转换为YOLOv8-pose训练格式的全流程指南。特别针对工业检测和自动驾驶场景,分享了标注规范、格式转换脚本及常见问题解决方案,帮助开发者高效准备训练数据并优化模型性能。

weixin_27419879的博客 309

Python 多线程学习

前言 在爬虫学习的过程中,一旦爬取的数量过大,很容易带来效率问题,为了能够快速爬取我们想要的内容。为此我们可以使用多线程或者多进程来处理。 多线程和多进程是不一样的!一个是 threading 库,一个是 multiprocessing 库。而多线程 threading 在 Python 里面被称作鸡肋的存在!关于 Python 多线程有这样一句名言——“Python下多线程是鸡肋,推荐使用多进程...

Herishwater的博客 3715

基于SHIS凝视型短波红外高光谱相机(900-1700nm)区分不同宝石的差异性和可分性(宝石分选)

SHIS系列凝视型高光谱相机基于液晶可调谐滤波器(LCTF),通过电控LCTF进行连续细分窄波段分光,对每个波段进行高分辨率的二维面阵成像,进行图像处理后,获得完整的高光谱高清图像序列。具有低功耗、小型化、使用方便和易于扩展的优势。其工作波段覆盖400nm至1000nm,能够捕捉宝石在不同波长下的光谱特征,为宝石鉴定提供了新的工具。

wayho的博客 710

python多线程与多进程使用选择对比

并发并行区别,cpu密集型和io密集型区别,python多线程与多进程资源消耗与开销,对比与选择

hutaotaotao的博客 1858

Qt + Robot Interface实现上位机和发那科机器人通信

摘要: 本文详细介绍了FANUC机器人的RobotInterface模块开发流程,包括环境配置、通信连接和上位机开发等内容,并提供了数值寄存器、位置寄存器和当前位置的读写代码等示例。适用于自动化行业有通讯需求的上位机开发人员,保姆教程,超详细版,新手也可以根据示例开发自己的通信程序。

xyhkma的博客 1750

Windows 11 安装、使用 Git:下载、安装、概念、命令、分支模型

本文详细介绍了在 Windows 11 系统上安装与使用 Git 的完整流程,涵盖从官方或国内镜像下载安装包、关键安装选项配置,到 Git 核心概念(如工作区、暂存区、分支、远程仓库等)的通俗解释。同时梳理了常用命令与五种主流 Git 分支模型(如 Git Flow、GitHub Flow 等),帮助开发者根据项目规模选择合适的工作流,是面向初学者与进阶用户的实用指南。

寒水馨 · 轻量级技术文档 · hanshuixin.org 2389

【Java教程】Day15-01 多线程:进程与线程的基础知识

在现代计算机操作系统中(如 Windows、macOS、Linux),可以执行多个任务同时运行,这种技术叫做多任务处理。尽管CPU是单核的,也能通过操作系统的调度让多个任务看起来像是同时执行的。

max202011161630的博客 1235

①电子产品拆解分析-暖手宝

电子产品拆解分析-暖手宝 ①按键三档调温暖手; ②长按进入氛围呼吸灯; ③安卓接口充电以及支持USB输出;

a6662580的博客 5295

多线程原理详解【上】(程序、进程、线程介绍,线程创建的三种方式(Thread、Runnable、Callable)、三种方式各自实现多线程的具体操作、代码解析)

多线程原理详解01(程序、进程、线程介绍,线程创建的三种方式(Thread、Runnable、Callable)、三种方式各自实现多线程的具体操作、代码解析)

Java 领域技术分享 1268

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

01. 进程与线程

进程、线程、并行、并发等的概念,java中如何创建线程,线程的状态,多线程方法的优缺点、多线程的原理应用,以及对应的设计模式

weixin_42314827的博客 672

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

线程-进程-多线程 概述简介

看起来是多个任务在工作, 其实分析一下本质, 我们的大脑是不是在同一时间依旧只做了一件事情, 比如我们在吃饭, 有些人是不是吃着吃着在刷抖音, 有些人边吃着边追剧, 但是在同一瞬间的时候, 可能这一秒是在看手机 , 下一秒吃了一口饭, 你自己因为这个时间交替的很快同时做了两件任务. 分工合作,相当于真正的多核了, 但是我们的大脑是一件事情, 就是只能在一个时间只能做一件事情, 比如说我们锻炼双脑, 左手画圆右手画圈是不是非常难, 正常人的大脑以及一个时间做一件事情就已经很好了.

Jean·z的博客 927

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

(Java多线程)多线程原理和使用

并发与并行 并发:指两个或多个事件在同一个时间段内发生。 并行:指两个或多个事件在同一时刻发生(同时发生)。 在操作系统中,安装了多个程序,并发指的是在一段时间内宏观上有多个程序同时运行,这在单 CPU 系统中,每一时刻只能有一道程序执行,即微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那是因为分时交替运行的时间是非常短的。 而在多个 CPU 系统中,则这些可以并发执行的程序便可以分配到多个处理器上(CPU),实现多任务并行执行,即利用每个处理器来处理一个可以并发执行的程序,这样多个程

我真的很不错的博客 550

java学习 day 23 多线程 进程的概述和多进程的意义 线程的概述和多线程的意义 JVM运行原理以及JVM启动的线程探讨 实现多线程 线程调度 线程控制

23.01_多线程(进程概述及多进程的意义) A:线程和进程 要想说线程,首先必须得聊聊进程,因为线程是依赖于进程存在的。 B:进程概述 什么是进程呢?通过任务管理器我们就可以看到进程的存在。 概念:进程就是正在运行的程序,是系统进行资源分配和调用的独立单位。 每一个进程都有它自己的内存空间和系统资源。 C:多进程的意义 单进程计算机只能做一件事情。而我们现在的计算机都可以一边...

haha9417的博客 408

Concurrent Program-01:进程与线程_Java多线程

文章目录一、进程和线程1. 进程和线程2. 并行和并发3. 应用二、Java多线程1. 创建和运行线程2. 查看进程和线程的方法3. 线程运行的原理4. start & run5. sleep & yield6. 线程优先级7. join8. interrupt9. 不推荐的方法10. 主线程和守护线程11. 线程的5种状态12. 线程的6种状态 一、进程和线程 1. 进程和线程 ...

你今天真好看呀 764

线程与多线程

一.线程与进程 1.并发与并行 并发:指两个或多个事件在同一时间段内发生的。(交替执行) 并行:指两个或多个事件在同一时刻发生的。(同时执行) 2.线程与进程 进程:指正在运行中的应用程序,每个进程都有一个独立的额内存空间,进程是程序的一次执行过程,是系统运行程序的基本单位。每当用户启动一个进程时,操作系统为该进程分配一个独立的内存空间,让进程在这个独立内存空间运行。 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。 3.主线程:jvm执行main方.

qq_45824565的博客 151

多线程概念及多线程开启方式

多线程概念及多线程开启方式进程和线程什么时候开启多线程CPU的执行原理原理并发和并行同步和异步多线程和多进程的好处多线程的启动方式方式一:继承Thread类方式二:实现Runnable接口方式三: 实现Callable方式开启线程方式四: 匿名内部类开启线程方式五开启线程: Lambda表达式开启线程 坦克大战中怎么控制两个坦克,怎么能在玩游戏的同时还配上声音呢? 进程和线程 进程: 正在执行...

hcwdd的博客 1231

Java 多线程(01)—— 认识线程和创建线程

运行一个 Java 程序就是跑一个 Java 进程,该进程至少有一个线程即主线程,而 main 方法就是主线程的入口;

2201_75456895的博客 1388

JAVA基础【多线程】史上最简单基础入门01

前言: 在介绍多线程之前,先给大家普及下什么是进程,什么是线程。以及我们生活当中使用的那些软件使用到了多线程。 本文主线: 本文 从什么是进程,什么是线程。以及生活当中的多线程应用,前面的这些作为后面讲解什么是多线程的铺垫。主要介绍基本的并发,并行。以及如何创建多线程。 目录 基础铺垫 什么是 进程,线程? 生活中用到的多线程软件 间接入门 并发与并行 创建线程 入门完毕 基础铺垫 什么是 进程,线程? 进程 是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应

优快云博客专家、华为云享专家、Java领域新星创作者 2097

Java多线程,一文掌握Java多线程知识文集。

死锁是指在多线程并发环境中,两个或多个线程互相持有对方所需的资源,并且由于线程都在等待对方释放资源而无法继续执行的一种状态。简而言之,死锁是线程之间因为相互等待对方所拥有的资源而陷入无法前进的僵持状态。死锁发生的四个必要条件,也被称为死锁的四个条件:互斥条件(Mutual Exclusion):对于某种资源,每次只能被一个线程占用,若其他线程申请该资源,则必须等待。请求与保持条件(Hold and Wait):一个线程在申请资源时,已经占有了其他的资源,并且在等待新申请的资源。

m0_50308467的博客 1256

Python并发编程实战:多线程vs多进程,这篇给你讲透「锁」与「通」的秘密

选多线程:IO密集型(文件读写、HTTP请求)、需要共享内存、任务轻量(如爬虫、日志处理)。选多进程:CPU密集型(数值计算、图像渲染)、需要突破GIL、任务独立(如分布式计算节点)。最后留个小问题:如果你的程序既要处理大量网络请求(IO密集),又要对返回数据做复杂计算(CPU密集),你会如何设计并发方案?欢迎在评论区分享你的思路!

yue_yun_的博客 1270

什么是进程,进程与线程之间的关系!!!

什么是进程,进程与线程之间的关系!!! 首先我们先讲解进程,进程是什么呢!!! 进程:是指系统正在运行的一个应用程序(手机上可以理解为一个App,PC上可以理解为程序),是系统进行资源分配和调度的基本单位。一个程序或者应用至少有一个进程。 线程:线程呢则是CPU调度最小(比进程更小)的能独立运行的执行单元,也是有限的系统资源。 两者之间的关系:一个进程之间至少包含一个或多个线程,(包含的关系)进程有一个独立的运行空间,其中的线程共享此空间,也拥有此进程的全部资源,,,因此可以并发(并行)执行。 创建线程的

Adorablenewwhite的博客 1005
上一篇: Redis
下一篇: 多线程原理与实战【02 创建线程的4种方法】
Ryder_code
博客等级 码龄7年 0粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值