孙鑫VC学习笔记:第十五讲 (一) 进程和线程基本概念

避坑指南:Cursor AI生成Flutter代码时最容易翻车的5个配置细节 本文深入剖析了使用Cursor AI生成Flutter代码时,因.cursorrules配置文件不当而导致的五大常见问题。重点探讨了如何通过制定清晰、具体的规则,避免状态管理混乱、设计图输入低效、项目架构脱节、性能隐患及规则维护缺失等陷阱,从而将AI转化为高效、可靠的开发伙伴,提升代码质量和团队协作效率。 阅读详情

程序、进程和线程基本概念

——程序和进程

程序是计算机指令的集合,它以文件的形式存储在磁盘上。
进程:通常被定义为一个正在运行的程序的实例,
 是一个程序在其自身的地址空间中的一次执行活动。
进程是资源申请、调度和独立运行的单位,因此,它使用系统中的运行资源;
而程序不能申请系统资源,不能被系统调度,也不能作为独立的运行的单位,
 因此,他不占用系统的运行资源。
进程由两个部分组成:
 1、操作系统用来管理进程的内核对象。内核对象是操作系统内部分配的一个内存块,内核对象也是系统用来存放关于进程的统计信息的地方。
 2、地址空间。它包含所有可执行模块或DLL模块的代码和数据。他还包含动态内存分配的空间。如线程堆栈和堆分配空间。

内核对象:是操作系统内部分配的一个内存块,它是一种只能被内核访问的数据结构,
 其成员负责维护该对象的各种信息,应用程序无法找到并直接改变它们的内容,
 只能通过Windows提供的函数对内核对象进行操作

——进程

进程是不活泼的。进程从来不执行任何东西,它只是线程的容器。
若要使进程完成某项操作,它必须拥有一个在它的环境中运行的线程,
此线程负责执行包含在进程的地址空间中的代码。
单个进程可能包含若干个线程,这些线程都“同时”执行进程地址空间中的代码。
每个进程至少拥有一个线程,来执行进程的地址空间中的代码。
当创建一个进程时,操作系统会自动创建这个进程的一个线程,称为主线程。
此后,该线程可以创建其他的线程


进程、程序和线程
——线程

线程有两个部分组成:
 1。线程的内核对象,操作系统用它来对线程实施管理,内核对象也是系统用来存放线程统计信息的地方。
 2。线程堆栈,它用于维护线程在执行代码时需要的所有参数和局部变量。
当创建线程时,系统创建一个线程内核对象。
该线程内核对象不是线程本身,而是操作系统用来管理线程的较小的数据结构。
可以将线程内核对象视为由关于线程的统计信息组成的一个小型数据结构。

线程总是在某个进程环境中创建。
系统从进程的地址空间中分配内存,供线程的堆栈使用。
新线程运行的进程环境与创建线程的环境相同。
因此,新线程可以访问进程的内核对象的所有句柄、进程中的所有内存
和在这个相同的进程中的所有其他线程的堆栈。
这使得单个进程中的多个线程确实能够非常容易的互相通信。

线程只有一个内核对象和一个堆栈,保留的记录很少,因此所需要的内存也很少。
因为线程需要的开销比进程少,因此在编程中经常采用多线程来解决编程问题,
而尽量避免创建新的进程。


——线程运行
操作系统为每一个运行线程安排一定的CPU时间——时间片。
系统通过一种循环的方式为线程提供时间片,线程在自己的时间内运行,
因时间片相当短,因此,给用户的感觉,就好像线程是同时进行的一样。
如果计算机拥有多个CPU,线程就能真正意义上运行了


注意:
 我们可以用多进程代替多线程,但是这样不是明智的,因为
 1.每新建一个进程,系统要为之分配4GB的虚拟内存,浪费资源;
    而多线程共享同一个地址空间,占用资源较少
 2.在进程之间发生切换时,要交换整个地址空间;
   而线程之间的切换只是执行环境的改变, 效率较高。 

【读论文】ASR大模型动态热词新方案 大型语言模型(LLMs)以其卓越的通用知识和推理能力重塑了 AI 领域,但它们在处理特定领域或用户的专有词汇(即“热词”)时,往往表现出“选择性失忆”。传统的 RAG 或 Prompting 方案在实时性和准确性上存在瓶颈。阿里的《Hotword Model for Large Models》论文提出了一种“神经插件”方案,它能够在不修改基座模型权重的前提下,动态、精准地将热词能力注入到生成过程中。本文将从架构设计、训练范式到推理逻辑,全方位拆解这一技术的内核,并探讨其在工业级应用中的价值。 阅读详情

相关推荐

【mip-NeRF】使用一组二维图像渲染3D场景视频(mip-NeRF论文复现)

本文对mip-NeRF模型的pytorch实现进行了复现

Ryan2k的博客 1841

孙鑫VC学习笔记:第十五讲 进程和线程基本概念

程序、进程和线程基本概念——程序和进程程序是计算机指令的集合,它以文件的形式存储在磁盘上。进程:通常被定义为一个正在运行的程序的实例, 是一个程序在其自身的地址空间中的一次执行活动。进程是资源申请、调度和独立运行的单位,因此,它使用系统中的运行资源;而程序不能申请系统资源,不能被系统调度,也不能作为独立的运行的单位, 因此,他不占用系统的运行资源。进程由两个部分组成: 1、操作系统用来管理进程

遐迩思的专栏 2029

Avalonia v11实战:手把手教你从零创建第一个跨平台桌面App(含设计器不显示的解决方案)

本文详细介绍了如何使用Avalonia v11从零开始创建跨平台桌面应用,包括环境准备、项目创建、界面设计及常见问题解决方案。特别针对设计器不显示等常见问题提供了实用解决方法,帮助.NET开发者快速掌握这一强大的UI框架,实现Windows、macOS和Linux多平台应用开发。

weixin_30417487的博客 163

孙鑫:第十五讲 多线程聊天室程序创建

孙鑫15课:多线程与聊天室程序的创建 程序,进程(32位进程,分配2的32次方,4GB,2GB内核分区,2GB用户分区。),线程 进程是线程容器。真正完成代码执行的是线程。主线程:main(),winmain() 下面创建一个多线程的程序:(WIN32控制台程序 ) #include //访问windows API函数 #include //C++标准输入输出流头文件   int i

dlfer11的专栏 1448

保姆级教程:用torch.profiler给你的vLLM推理做个“全身体检”(附Perfetto可视化分析)

本文提供了一份详细的vLLM推理性能分析教程,通过torch.profiler和Perfetto工具链实现从数据采集到可视化分析的全流程。文章涵盖了环境配置、性能数据采集、trace文件解析以及Perfetto可视化分析,帮助开发者优化大模型推理服务的性能,显著降低计算资源消耗。

weixin_29041767的博客 357

鸿蒙系统开发工程师:核心技术解析与深度面试指南

摘要: 鸿蒙系统开发工程师需具备底层驱动开发、系统移植优化及分布式架构能力。核心职责包括硬件适配(Bootloader、内核移植、HDF驱动开发)、性能调优(启动加速、功耗管理)及稳定性保障。技术要求涵盖C/C++编程、Linux内核机制、鸿蒙架构(HDF、分布式服务)及ArkTS/ArkUI基础。面试重点考察系统移植流程(如ARM板适配)、驱动开发(I2C/Display)、性能优化手段及内存/同步机制的应用。

郑伟强dev的专栏 429

孙鑫VC学习笔记:第十五讲 线程创建方法

一、创建一个线程创建线程使用CreateThreadThe CreateThread function creates a thread to execute within the address space of the calling process. HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,   DWORD

遐迩思的专栏 2612

YOLOv11改进 | 特殊场景检测篇 | 低照度图像增强网络SCINet改进黑暗目标检测(全网独家首发)

本文给大家带来的改进机制是低照度图像增强网络SCINet,SCINet(自校正照明网络)是一种专为低光照图像增强设计的框架。它通过级联照明学习过程和权重共享机制来处理图像,优化了照明部分以提升图像质量。我将该网络集成在YOLOv11的主干上针对于图像的输入进行增强,同时该网络的并不会增加参数和计算量,基本和普通的网络结构保持一致,同时该结构支持自定义调节层数,来控制图像增强的效果 ,非常适合想要在黑夜目标检测领域发表文章的读者,该基本网络不会影响模型的速度。欢迎大家订阅我的专栏一起学习YOLO!

Snu77的博客 2206

孙鑫 第十七课进程间通信之一 剪贴板

说明剪贴板是内存中的一块共享区域,两个进程间通过共享剪贴板中的数据实现进程间通信的目的。在本节课中,主要讲了当剪贴板中的数据是内存块对象时的操作方法。在剪贴板编程时,对于数据是内存块对象的情况,在申请内存块时必须使用函数GlobalAlloc(),并且必须指定标识GMEM_MOVEALBLE,在从剪贴板中取数据时也要对这一情况进行处理:获得内存块对象句柄,转换为指针再使用。★ 写剪贴板步骤①打开剪

cuihao0532的博客 596

【转录调控网络】代谢组学与其他组学的联合分析经典模式简介

多组学联合分析经典模式转录组学&代谢组学联合分析 转录组学&代谢组学联合分析 转录组是获得生物体内基因表达的重要方法,代谢组是生物体表型的基础和直接体现者。 转录组测序可以得到大量差异表达基因和调控代谢通路,但由于基因与表型之间很难之间关联,导致关键的信号通路难以确定,因此往往达不到预期的研究目的。代谢产物是生物体在内外调控下基因转录的最终结果,是生物体表型的物质基础。 在系统生物学研究时代,生物过程复杂多变,基因调控网络复杂。针对特定的生理、病理等表型进行研究,利用转录组的数据获得大量差异

小哲的博客 6194

把事务数据变成可分析数据:用 ABAP CDS 构建 Cube View 与 Query View,并拆解 OData 取数的底层路径

ABAP CDS分析建模:Cube与Query视图的实践解析 本文探讨了ABAP CDS分析建模中Cube View与Query View的核心区别与应用场景: 架构定位 Cube View作为分析型数据源,定义维度和度量的基础语义 Query View作为消费投影,控制查询可见字段和聚合逻辑 关键实现 通过@Analytics.dataCategory: #CUBE声明分析数据源 使用@DefaultAggregation确保指标口径一致性 @Analytics.query: true启用分析引擎特性 运

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 140

孙鑫VC学习笔记:多线程编程

孙鑫VC学习笔记:多线程编程 SkySeraph Dec 11st 2010 HQU Email:zgzhaobo@gmail.com QQ:452728574 Latest Modified Date:Dec.11st 2010 HQU ================================================================...

192

【MODBUS】Java实现的Modbus协议类库——推荐j2mod库

Jamod是另一个开源的Modbus Java库。这个库的设计是完全面向对象的,基于抽象,应该支持易于理解、可重用性和可扩展性。它支持Modbus RTU和Modbus TCP,并且提供了主站和从站的功能。这是jamod Modbus库的一个分支,取自1.2.1版本,根据Apache 2许可证发布,包含在该项目的SVN存储库中。j2mod项目的目标是基于Java编程语言生成一个功能更全面的Modbus(tm)通信库。这是一个积极开发的项目,接受具有Modbus主站和从站开发经验的专业软件工程师提交的文件。

开源物联网项目商业化作者 5639

孙鑫VC学习笔记:第十五讲 (二) 线程创建方法

一、创建一个线程 创建线程使用CreateThread The CreateThread function creates a thread to execute within the address space of the calling process. HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, 

487

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

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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

孙鑫VC学习系列教程

教程简介 1、循序渐进  从Win32SDK编程开始讲解,帮助大家理解掌握Windows编程的核心 —— 消息循环机制。 2、通俗易懂  编程语言枯燥难懂,然而通过孙鑫老师形象化的讲解,Windows和MFC编程中的难点、重点,让你轻松掌握。 3、实战性强  编程中要注意什么?如何阅读出错提示?如何调试运行程序?如何排查错误,解决问题?通过孙鑫老师的一步步操作讲解,带你迅速掌握程序

学如逆水行舟,不进则退 1821

VC中sqlite的使用

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

孙鑫C++视频教程

(注意以下为FTP下载地址,建议使用迅雷等下载工具下载,全20CD,已添加完整) 孙鑫C++教程(全20讲)PPT讲义.rar 孙鑫C++教程01.rar 孙鑫C++教程02.rar 孙鑫C++教程03.rar 孙鑫C++教程04.rar 孙鑫C++教程05.rar 孙鑫C++教程06.rar 孙鑫C++教程07.rar 孙鑫C++教程08.rar 孙鑫C++教程0

又见炊烟 6280

计算机控制技术及应用

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

孙鑫VC中的多线程小结

一、程序和进程的关系 程序是指计算机指令的集合,它以文件的形式存储在硬盘上,而进程通常被定义为一个正在运行的程序的实例,是一个程序在其自身地址空间中的一个执行活动。例如,一个编写的程序在编译后生成的后缀为.exe的可执行程序,是以文件的形式存储在硬盘上,当我们运行这个可执行文件的时候,就启动了该程序的一个实例,我们将它称为”进程“。 显然,一个程序可以对应多个进程,例如我们可以同时打开多个wo

ahuang1900的专栏 1239

孙鑫VC学习笔记:第十七讲 (二) 用匿名管道实现进程间的通信

用匿名管道实现进程间的通信: 匿名管道只能在本地主机上,父子进程之间完成通信: 步骤:1.新建一个项目Parent 2.增加“匿名管道”子菜单以及“创建管道”、“读取数据”与“写入数据”三个菜单项。3.在CParentView 中添加两个成员句柄:HANDLE m_hWrite;HANDLE m_hRead;4.为“创建管道”菜单项实现创建管道的功能 

梦想---软件设计师 2225

孙鑫VC视频教程笔记之第十五课“多线程与聊天室”

  代码1分析:说明:对于单核cpu的电脑来说,线程都在自己的时间片中运行,单位时间内,系统只能运行一个线程,交替运行;对于多核cpu或多cpu的电脑来说,才是真正意义上的单位时间内运行多个线程 说明:如果采用向导创建的Win32 Console程序选择的是空项目时,则以下使用方式是正确的,如果选择是”hello world”的简单应用程序时,则在main函数中想要使用输入输出流,

Roger Ge 的专栏 5886

孙鑫VC学习笔记:第十五讲 增加互斥条件实现线程同步

增加互斥条件,实现线程同步。一、创建互斥对象 : HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes,// 安全性 BOOL bInitialOwner,  // flag for initial ownership, LPCTSTR lpName     // pointer to mutex-object name );打

遐迩思的专栏 2903

孙鑫VC学习笔记:第十六讲 利用事件对象实现线程间的同步

事件对象基本概念事件对象:事件对象与互斥对象都属于内核对象,事件对象包含一个使用计数,一个用于指明该事件是一个自动重置的事件还是一个人工重置的事件的布尔值,另一个用于指明该事件处于已通知状态还是为通知状态的布尔值。有两种不同类型的事件对象:一种是人工重置的事件,另一种是自动重置的事件。当人工重置的事件得到通知时,等待该事件的所有线程均变为可调度线程;当一个自动重置的事件得到通知时,等待该事件的

遐迩思的专栏 4162

孙鑫VC学习笔记:第十五讲 (四) 编写一个基于MFC对话框的聊天程序

编写一个基于MFC对话框的聊天程序:1.新建一个基于MFC项目工程Chat2.加载套接字库,有下面两种方法,在这里选择第二种方法,因为更方便。方法一、使用WSAStartup()加载套接字库 参考MSDN中的范例代码,拷贝到自己的程序中修改即可。 注意不再使用套接字后调用WSACleanup()。方法二、使用AfxSocketInit()加载套接字库(MFC) BOOL AfxSocketIn

梦想---软件设计师 2896
上一篇: SetWindowLong 和SetClassLong区别
下一篇: 孙鑫VC学习笔记:第十五讲 (二) 线程创建方法
Savitch
博客等级 码龄16年 84粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值