【日积月累】关于进程 线程和一些常见的多线程概念

      最近在看《深入解析Windows操作系统》和研究Java的JVM机制,觉得有些概念看起来简单,但是温故而知新,勤总结和归纳,对自己的知识体系的搭建大有裨益。此文引用了网上的一些博文和正在看的书中的一些段落。

 

【一】 进程和线程的一个形象的类比

在pengpenglin的博文中 【原】多线程编程的基础知识点 中对进程和线程的关系作了一个很好的比喻:

 

下面我以一个日常生活中简单的例子来说明进程和线程之间的区别和联系:



这副图是一个双向多车道的道路图,假如我们把整条道路看成是一个“进程”的话,那么图中由白色虚线分隔开来的各个车道就是进程中的各个“线程”了。

①这些线程(车道)共享了进程(道路)的公共资源(土地资源)。

②这些线程(车道)必须依赖于进程(道路),也就是说,线程不能脱离于进程而存在(就像离开了道路,车道也就没有意义了)。

③这些线程(车道)之间可以并发执行(各个车道你走你的,我走我的),也可以互相同步(某些车道在交通灯亮时禁止继续前行或转弯,必须等待其它车道的车辆通行完毕)。

④这些线程(车道)之间依靠代码逻辑(交通灯)来控制运行,一旦代码逻辑控制有误(死锁,多个线程同时竞争唯一资源),那么线程将陷入混乱,无序之中。

⑤这些线程(车道)之间谁先运行是未知的,只有在线程刚好被分配到CPU时间片(交通灯变化)的那一刻才能知道

 

 

【二】 什么是进程和线程?

在《深入解析Windows操作系统》第四版中提到:

"尽管表面上看起来程序和进程十分类似,但本质上它们却是截然不同的。程序 时指一个静态的指令序列 ,而进程 则是一个容器 ,其中包含了执行一个程序的特定实例时所用到得各种各样资源。"

 

 举个例子,一个Windows进程包含哪些元素呢?从最高层次的抽象来看:

  • 一个私有的虚拟地址空间 ,这是指该进程可以使用的一组虚拟内存地址
  • 一个可执行的程序,它定义了初始的代码和数据,并且被映射到该进程的虚拟地址空间中。
  • 一个已打开句柄的列表,这些句柄指向各种系统资源,比如信号量,通信端口和文件,该进程内所有线程都可以访问这些资源。
  • 一个被称为访问令牌 的安全环境,它标识了与该进程相关联的用户,安全组和特权。
  • 一个被称为进程ID 的唯一标识符。
  • 至少一个 执行线程。

 

    一个标准Windows 进程(32位)的内存分配结构如下图, 摘自《Windows Java Address Space 》:

 

 

 

一个标准Java进程(32位)的内存分配结构如下图, 摘自《Windows Java Address Space 》:

 

 

    一个完整Java进程分配的时候如下内容:

  1. Java VM
  2. Application byte code
  3. Native heap space
  4. Java heap space
  5. JIT'd code space
  6. Link Libraries

所以通过这个图我们就可以很清楚的明白,为啥你虽然有3.25G内存,减去2G os space,理论上一个java进程的Java Heap的Xmx可以设置成最大1.25G,但是实际上会报错:"Could not reserve enough space for object heap",原因就在于那剩下的1.25G不单单要被java heap瓜分,还要被Java VM进程的native heap,link libraries等等所占用。

 

 

【三】 (进程/线程)死锁 饥饿 饿死

 

死锁 :两个或两个以上进程等待对方释放资源。形成死锁最直观的现象就是出现等待环。

 

一个很形象的比喻:

两个山羊过一个独木桥都走到桥中央,一个山羊等另一个山羊过去然后再过桥,另一个山羊等这个山羊过去才准备过去。结果两人都堵在中间无法动弹了。

 

饥饿:

 

饿死:

 

深入解析UEFI PEI阶段:PeiCore的三次调用与内存管理机制 本文深入解析UEFI启动流程中的PEI阶段,重点探讨PeiCore的三次调用与内存管理机制。详细介绍了PeiCore在临时内存中的初始化、堆栈切换至永久内存的过程,以及最终交接给DXE阶段的关键步骤,为开发者提供调试技巧与实战案例,助力解决UEFI启动问题。 阅读详情

相关推荐

本地部署了qwen2.5:0.8b ,对接openclaw 后,电脑卡的要死

OpenClaw 强制 16k 上下文 + 无限历史 + Agent 调度,把 0.8b 压垮。按上面配置:轻量化 + 限历史 + 驻留显存,电脑立刻不卡。

专注于技术研发行业技术主要有AI人工智能视觉识别、物联网技术、电商平台、app原生技术、微信小程序、鸿蒙语言开发、办公企业oa、ERP等,致力于做东半球最优秀的程序员 978

java多线程

线程编程一直是学员们比较头痛和心虚的地方,因为线程执行顺序的不可预知性和调试时候的困难,让不少人在面对多线程的情况下选择了逃避,采用单线程的方式,其实只要我们对线程有了明确的认识,再加上java内置的对多线程的天然支持,多线程编程不再是一道难以逾越的鸿沟。 进程、线程、并发执行 首先我们先来认识一下进程、线程、并发执行的概念:   一般来说,当运行一个应用程序的时候,就启动了一个进程,当然有

liuzhe_2008的专栏 708

Java电商秒杀系统性能优化(一)——电商秒杀系统框架回顾

电商秒杀系统框架回顾项目简介外部依赖框架回顾项目要点项目中存在的问题小结 课程是免费的,课程地址如下:SpringBoot搭建电商秒杀项目,课程真的很棒,作者的思路很清晰,建议各位读者可以跟着视频练习一下这个项目; 项目简介 通过SpringBoot快速搭建的前后端分离的电商基础秒杀项目。项目通过应用领域驱动型的分层模型设计方式去完成:用户otp注册、登陆、查看、商品列表、进入商品详情以及倒计时秒...

ghw15221836342的博客 3720

进程,线程,协程小白理解

1.单核cpu之所以能够实现多进程,主要是依靠于操作系统的进程的调度算法:   如时间片轮转算法,在早期,举例说明:有5个正在运行的程序(即5个进程) :QQ微信有道词典网易云音乐chrome浏览器,操作系统会让单核cpu轮流来运行这些进程,一个进程只运行2ms,这样看起起来就像多个进程同时在运行,从而实现多进程。 2.多核cpu则理解为多个人来处理程序(性能提高)。 3.线程 线程的运行也是来回切换的执行的,线程是对进程的资源调度,  ...

lmp5023的博客 432

思博伦Spirent TestCenter创建单播流uni-stream

Traffic Generator列表中会出现刚才创建的uni-stream,创建完成。通常测试情况下,主要对Ethenet II和IPv4 Header进行配置。(通常情况下,如果流配置比较规范,选择任意端口接收,也没问题。编辑uni-stream基本信息。配置本条流由STC哪个端口接收。

辗转反测的博客 1681

以太网PHY寄存器

并且,值得注意的是,由于目前很多百兆的PHY芯片其MAC接口主流的都是SMII/S3MII,8个端口的接口是相互关联的,一个端口设置Isolate可能会影响其他端口的正常使用,因此在使用中注意不要随意更改bit10的状态。Bit10和bit11的区别是,bit11的配置在强制情况下生效,PHY只能工做与bit11指定的工作模式,而bit10的配置在非强制配置情况下生效,仅仅控制PHY在AN时候的优先级,偏向于Maser或者Slave,但是最终的工作模式看协商的结果,不一定和优先级配置的结果一致。

mangofu的博客 292

Java多线程理解

多线程编程一直是学员们比较头痛和心虚的地方,因为线程执行顺序的不可预知性和调试时候的困难,让不少人在面对多线程的情况下选择了逃避,采用单线程的方式,其实只要我们对线程有了明确的认识,再加上java内置的对多线程的天然支持,多线程编程不再是一道难以逾越的鸿沟。 进程、线程、并发执行 首先我们先来认识一下进程、线程、并发执行的概念:   一般来说,当运行一个应用程序的时候,就启动了一个进程,当然

conect的专栏 1287

《YOLO11魔术师专栏》专栏介绍 & 专栏目录

【原创自研模块】【多组合点优化】【注意力机制】【主干篇】【neck优化】【卷积魔改】 【block&多尺度融合结合】【损失&IOU优化】【上下采样优化】【小目标性能提升】【前沿论文分享】【训练实战篇】

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1万+

进程、线程、并发执行的概念

于进程、线程、并发执行的概念,我们先来看下面的一段话:“一般来说,当运行一个应用程序的时候,就启动了一个进程,当然有些会启动多个进程。启动进程的时候,操作系统会为进程分配资源,其中最主要的资源是内存空间,因为程序是在内存中运行的。在进程中,有些程序流程块是可以乱序执行的,并且这个代码块可以同时被多次执行。实际上,这样的代码块就是线程体。线程是进程中乱序执行的代码流程。当多个线程同时运行的时候,这样...

weixin_33875839的博客 457

第十二章 供水管网水力模型软件介绍

本文介绍了国内外主要供水管网建模软件及其特点,重点分析了某高建模软件V14的创新功能。国际主流软件包括开源的EPANET、商业软件InfoWorksWS、WaterGEMS和MIKEURBAN,各具特色但存在应用局限。某高V14软件实现了管网GIS与模型一体化管理,采用一G多网、一网多模、一模多案、网模合一技术路线,支持全信息模型建立和动态数据更新。其创新点包括水量分配理念革新(精确/模糊匹配、三种用水模式)和首创Web服务功能。通过并发计算、GPU加速等技术优化性能,具有较高性价比。

weixin_45258875的博客 207

GEE:关于遥感生态指数(RSEI)的若干疑问

本文记录了若干关于在 Google Earth Engine (GEE)平台上,计算基于主成分分析(PCA)的遥感生态指数(RSEI)的问题。并记录了解决这些问题的一些答案。问题包括,主成分分析的特征值的正负,主成分的占比,去云后空值像素的处理方法,异常值处理方法,如何看载荷等。

养乐多的博客 3417

进程、线程和协程之间的区别和联系

一、进程   进程,直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己的地址空间,有自己的堆,上级挂靠单位是操作系统。操作系统会以进程为单位,分配系统资源,所以我们也说,进程是资源分配的最小单位。 【进程间通信(IPC)】: 管道(Pipe) 所有的 POSIX systems, Windows; 命名管道(FIFO) 所有的 POSIX 系统...

青萍之末的博客 11万+

Jetson nano 系列之2—板载摄像头IMX219启动

我选用的是亚博科技jetson nano的开发板。

驽马十驾,功在不舍;锲而不舍,金石可镂。 4274

日积月累--线程01

进程和多线程的概念及线程的优点   进程:进程是操作系统结构的基础;是一次程序的执行;是一个程序及其数据在处理机上顺序执行时所发生的活动;是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。(百度百科)   初看这段话觉得十分抽象,难以理解,请看下图:                打开“windows任务管理器”,完全可以将运行在内存中的exe文件理解为进程,进程...

weixin_30443747的博客 119

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Java—线程,多线程,线程池研究之旅 one【奇葩之旅,come】

最近经常被问到线程实现方式、多线程如何使用、锁机制、资源是否共享、如何创建安全的生产者、并发开发到底是什么,等等等诸多类似问题,所以本着学习的心态顺便记录点什么,那么我们开始ba~~~

qq_15765269的博客 493

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day10】 —— 并发编程1

百日闭关修炼,每日三道高频面试题。一起冲进大厂!看什么看?快上车!

陈哈哈的菜园子 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java—线程,多线程,线程池研究之旅 two【奇葩之旅,come】

最近工作比较多,我还更新b站,还需要工作,所以更新较慢,勿建议哦。文章问题较多,自己目前经验有限,一方面自己还需要更多的进步,另一方面发出去的文章我也会多次阅读,有错误就会更正,希望大家一起进步。首先需要知道这个”头号小弟“(main线程)在java程序运行时,首先调用执行main方法。而每个项目都要有一个主类,这个主类中必须得有main方法,用于程序的入口。如下图:Java程序里:SpringBoot程序里:不管是什么项目都会存在main的。

qq_15765269的博客 847

【多线程之一】如何实现简单的多线程

前言学习C++很久了,一直都没有接触到多线程,现在想来也正直毕业找工作之际,趁此机会,先熟悉熟悉一些关于多线程的知识吧。每天学习一点,权当日积月累了。第一个多线程的例子#include <Windows.h> #include <iostream>DWORD WINAPI fun(void *g) { while (1) { std::cout << (char*)g

约修亚的世界 386

java平均分配_Java笔记线程与进程

“要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人…万中无一”——包租婆这道理放在Java语言学习上也一并受用。在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从java语言小白进阶到高手,需要经历的是日积月累的学习。那么如何学习呢?当然是每天都要学习java知识!!作者韩大宾白天搬砖,晚上做梦。我有故事,你有酒么?1并发与并行并发:指两个或多个事件在同一个时间段内发生...

weixin_36418862的博客 249

Python日积月累_5_多进程/文件夹拷贝器

文章目录多进程1. 回顾多线程2. 多进程的创建和维护3. 多进程的资源管理:写时拷贝Ubuntu中通过`ps`查看进程信息4. 多进程和多线程的区别5. 进程间的通信_队列(Queue)进程池多进程应用:文件夹拷贝器第一版:实现基本功能第二版:增加进度条 多进程 1. 回顾多线程 多线程比较轻量,通过threading.Thread类管理线程,通过start方法开始线程;通过threading.Lock方法创建互斥锁避免资源冲突,通过acquire和release管理互斥锁;此外还有守护线程等特殊线程。

weixin_43721070的博客 381

Java岗面试题--Java并发(日积月累,每日三题)

原理:在主线程中需要执行比较耗时的操作时,但又不想阻塞主线程时,可以把这些作业交给 Future 对象在后台完成,当主线程将来需要时,就可以通过 Future 对象获得后台作业的计算结果或者执行状态。守护线程(即 Daemon thread),是个服务线程,用来服务于用户线程,准确地来说就是服务其他的线程。需要注意的是,Java 本身并不能创造线程,因为线程其实是操作系统的一种资源,它由操作系统管理。线程:是进程的⼀个实体,是 cpu 调度和分派的基本单位,是比程序更小的能独立运行的基本单位。

SuZhan0711 3748

每日10道java面试题,日积月累 day 3

多线程 1. 什么是线程?线程和进程的区别? 线程:是进程的一个实体,是 cpu 调度和分派的基本单位,是比进程更小的可以独立运行的基本单位。 进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,是操作系统进行资源分配和调度的一个独立单位。 特点:线程的划分尺度小于进程,这使多线程程序拥有高并发性,进程在运行时各自内存单元相互独立,线程之间 内存共享,这使多线程编程可以拥有更好的性能和用户体验。 2. 线程有哪些状态? 线程通常都有五种状态,创建、就绪、运行、阻塞和死亡。 创建状态。在生.

weixin_50971499的博客 193

服务器操作日积月累

新手上路,随手记录一下平时接触的命令以备查看 一、从服务器拷贝文件到本地 1.从服务器复制文件到本地: scp xxx@×××.×××.×××.×××:/data/test.txt /home/myfile/ 2.从服务器复制文件夹到本地: scp -r xxx@×××.×××.×××.×××:/data/ /home/myfile/ 只需在前面加-r即可,就可以拷贝整个文件夹。 3...

JohnYu024的博客 317

Python使用中常见问题总结(一)

尊敬的读者您好:笔者很高兴自己的文章能被阅读,但原创与编辑均不易,所以转载请必须注明本文出处并附上本文地址超链接以及博主博客地址:https://blog.youkuaiyun.com/vensmallzeng。若觉得本文对您有益处还请帮忙点个赞鼓励一下,笔者在此感谢每一位读者,如需联系笔者,请记下邮箱:zengzenghe@gmail.com,谢谢合作! 1、Python包的三种安装方式...

Vensmallzeng的博客 5117

【日积月累】并发编程(一)

并发编程 线程 进程 线程池

qq_43238568的博客 316

Python使用中常见问题总结(二)

尊敬的读者您好:笔者很高兴自己的文章能被阅读,但原创与编辑均不易,所以转载请必须注明本文出处并附上本文地址超链接以及博主博客地址:https://blog.youkuaiyun.com/vensmallzeng。若觉得本文对您有益处还请帮忙点个赞鼓励一下,笔者在此感谢每一位读者,如需联系笔者,请记下邮箱:zengzenghe@gmail.com,谢谢合作! 一、Python的内存管理机制?...

Vensmallzeng的博客 397
上一篇: 雷人的51job的招聘系统(附图)......
下一篇: 冒泡排序
wangding263
博客等级 码龄19年 1粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值