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

网络工程师 (7)进程管理

一、进程相关的概念

(一)定义

       进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,也是操作系统结构的基础。进程是程序的一次执行实例,具有动态性、并发性、独立性、异步性和结构性等基本特性。

(二)结构

       进程由多个元素组成,主要包括程序代码、数据、进程控制块(PCB)以及系统资源等。其中,程序代码是进程执行的具体指令;数据是程序处理的对象;进程控制块是操作系统用于描述进程状态和控制进程运行的数据结构,是进程的唯一标识;系统资源则包括处理器、内存、I/O设备等。

(三)状态

       进程在其生命周期中会经历多种状态,主要包括就绪状态、运行状态和阻塞状态。就绪状态是指进程已经获得了除处理器以外的所有资源,等待被调度执行;运行状态是指进程正在处理器上执行;阻塞状态则是指进程因等待某种资源(如I/O操作)而无法继续执行。进程的状态之间可以相互转换。

(四)特性

  1. 动态性:进程是程序的一次执行过程,它随着程序的运行而不断变化。
  2. 并发性:多个进程可以在同一个处理器上并发执行,提高系统效率。
  3. 独立性:每个进程都有自己独立的运行环境和资源,互不干扰。
  4. 异步性:进程的执行速度不可预知,可能受到多种因素的影响。
  5. 结构性:进程由多个部分组成,包括程序、数据和进程控制块等。

(五)进程与程序的区别

       程序是静态的,它是一组有序的指令集合,用于描述计算机执行的任务。而进程则是程序的一次执行实例,是动态的、有生命周期的。程序可以多次执行,每次执行都会创建一个新的进程。进程包含了程序执行时的所有信息,如代码、数据、状态等。

(六)通信

       在操作系统中,进程之间需要进行通信以共享数据或协调行动。进程的通信方式有多种,包括管道、消息队列、共享内存、信号量、套接字等。这些通信方式各有优缺点,适用于不同的应用场景。

(七)调度与管理

       进程调度是操作系统的一项核心功能,它负责决定哪个进程应该获得处理器的使用权。进程调度的目标是提高系统吞吐量和响应速度,同时确保系统资源的公平分配。操作系统的进程管理功能包括进程的创建、终止、挂起、唤醒等,以及进程间的同步和互斥控制。

(八)进程与线程的关系

       进程是系统进行资源分配和调度的基本单位,而线程则是进程内的一条执行路径。一个进程可以包含多个线程,这些线程共享进程的资源,并可以并发执行。线程具有更小的开销和更高的执行效率,因为线程之间的切换比进程之间的切换要快得多。然而,线程也带来了并发控制的问题,如线程间的同步和互斥控制等。

二、死锁问题

(一)死锁的定义

       死锁是指两个或两个以上的线程(或进程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法继续执行下去。简单来说,就是每个线程都在等待另一个线程释放资源,而另一个线程又在等待该线程释放资源,从而形成了一个无法打破的循环等待链。

二、死锁产生的条件

  1. 互斥条件:进程要求对所分配的资源进行排他性控制,即在一段时间内某资源仅能为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待。
  2. 不剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自己来释放(只能是主动释放)。
  3. 请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。
  4. 循环等待条件:存在一种进程资源的循环等待链,链中每一个进程已获得的资源同时被链中下一个进程所请求。即存在一个处于等待状态的进程集合{P1, P2, …, Pn},其中Pi等待的资源被P(i+1)占有(i=0, 1, …, n-1),Pn等待的资源被P0占有。

(三)死锁产生的原因

  1. 资源竞争:线程之间需要共享有限的资源(如文件、内存、数据库锁等)。当多个线程同时访问并尝试获取多个资源时,就可能形成相互依赖,导致死锁。
  2. 不恰当的锁顺序:多个线程以不同顺序获取锁可能会导致死锁。例如,线程A先获取锁1,再获取锁2;线程B先获取锁2,再获取锁1。两者可能相互等待对方释放锁,从而形成死锁。
  3. 资源分配不当:系统提供的资源个数少于并发进程所要求的该类资源数,也可能导致死锁。

(四)死锁的解决方案

  1. 预防死锁

    • 破坏互斥条件:通过共享资源,避免资源的独占。
    • 破坏保持与等待条件:要求线程在获取资源之前,必须先释放已持有的资源。
    • 破坏不剥夺条件:允许线程强制释放资源,以避免死锁。
    • 破坏循环等待条件:为每个资源设定一个全局顺序,所有线程按顺序请求资源。
  2. 避免死锁

    • 资源请求顺序:规定所有线程必须以相同的顺序请求资源,避免循环等待。
    • 使用锁超时:在获取锁时设置超时时间,超时则放弃请求。
    • 使用更高级的锁机制:例如读写锁或信号量,避免不必要的锁竞争。
    • 死锁避免算法:例如银行家算法,通过预测资源分配的安全性来避免死锁。但需要注意的是,死锁避免算法的执行会增加系统的开销。
  3. 检测与恢复死锁

    • 死锁检测:判断系统是否处于死锁状态。常用的方法包括资源分配图、死锁检测工具(如jstack、VisualVM)等。
    • 死锁恢复:一旦检测到死锁,需要执行恢复策略。常用的方法包括剥夺某个进程所占有的资源(即强制释放资源),并将其分配给其他进程;或者将某些进程回滚到之前的状态,并重新尝试执行。

(五)死锁案例

       假设有两个线程A和B,它们分别需要资源R1和R2。线程A先获取了资源R1,然后尝试获取资源R2;线程B先获取了资源R2,然后尝试获取资源R1。此时,线程A和B都在等待对方释放资源,从而形成死锁。

       为了避免这种情况,可以规定所有线程必须以相同的顺序请求资源。例如,规定所有线程都必须先请求资源R1,再请求资源R2。这样,即使多个线程同时尝试获取资源,也不会形成死锁。

三、进程的互斥和同步 

(一)进程的互斥

  1. 定义

           进程互斥(Mutual Exclusion)是指在多进程或多线程环境下,确保多个进程或线程在同一时刻只能有一个进程或线程访问共享资源的同步机制。

  2. 目的

           互斥是进程同步的一部分,是保证多个进程间不会因同时访问共享资源而发生冲突或数据不一致的关键技术。当多个进程访问共享资源时,如果没有有效的互斥机制,可能会导致竞态条件(Race Condition),即进程的执行结果依赖于执行顺序,从而产生不一致或错误的结果。

  3. 临界区

           临界区指的是访问共享资源的那一段代码。在这段代码执行时,进程可能会改变共享资源的状态。为了防止多个进程同时进入临界区而导致错误或冲突,必须实现进程互斥。

  4. 实现方法

    • 禁用中断:一种最简单的互斥实现方法。在操作系统中禁用中断后,CPU就无法响应外部的中断请求,这意味着没有其他进程能抢占当前正在执行的进程。然而,这种方法只适用于单处理器系统,并且存在不公平的问题,因为禁用中断后,当前进程会一直占用CPU,其他进程无法执行。
    • 互斥锁:操作系统中最常用的同步机制之一。互斥锁用于确保同一时刻只有一个进程能够访问临界区。Lock(加锁):进程尝试获取锁,若当前没有其他进程持有锁,则进程获得锁并进入临界区;如果锁已被其他进程持有,进程将被阻塞。Unlock(解锁):进程执行完临界区代码后释放锁,允许其他进程获取锁并进入临界区。
    • 信号量:用于管理资源的同步工具,通常用来解决互斥问题。二值信号量(Binary Semaphore):只允许值为0或1,常用于实现互斥锁。当信号量的值为1时,进程可以进入临界区;当信号量的值为0时,进程需要等待。计数信号量(Counting Semaphore):允许值为非负整数,表示共享资源的数量。通过适当的增减操作,控制多个进程对资源的访问。
    • 自旋锁:一种简单的互斥锁,常用于多核或多处理器系统中。自旋锁的工作原理是,当一个进程尝试获取锁时,如果锁已经被其他进程持有,它会不断检查锁的状态,等待锁被释放,而不是阻塞自己。自旋锁避免了上下文切换的开销,但会消耗CPU时间,因此只适用于临界区代码执行时间非常短的情况。
  5. 遵循原则

    • 空闲让进:临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区。
    • 忙则等待:当已有进程进入临界区时,其他试图进入临界区的进程必须等待。
    • 有限等待:对请求访问的进程,应保证能在有限时间内进入临界区。
    • 让权等待:当进程不能进入临界区时,应立即释放处理机,防止进程忙等待。

(二)进程的同步

  1. 定义

           进程同步是指协调多个进程间的执行次序,确保它们按照某种特定的顺序来访问共享资源或执行特定的操作。

  2. 目的

           进程同步的目的是防止数据竞争和资源争用,确保系统的正确性和性能。

  3. 实现方法

    • 信号量:除了用于解决互斥问题外,信号量还可以用于实现进程同步。通过控制资源访问许可证的数量,信号量可以协调多个进程对共享资源的访问顺序。
    • 条件变量:通常与互斥锁一起使用,用于在某个条件满足时通知一个或多个进程。它允许进程在等待某个条件时释放互斥锁并进入等待状态,直到条件满足时才被唤醒。
    • 读写锁:区分读操作和写操作,允许多个进程同时读取,但只允许一个进程写入。这可以提高系统的并发性能,同时确保写操作的原子性和一致性。
  4. 注意事项

    • 避免死锁:死锁是指两个或多个进程因互相等待对方持有的资源而无法继续执行的情况。合理地申请和释放资源,采用适当的资源分配策略,可以避免死锁的发生。
    • 防止饥饿:饥饿指某个或某些进程由于长期得不到所需的资源而无法继续执行的情况。设计同步机制时需要考虑公平性,确保每个进程都有机会获得所需的资源。

 结语  

健康是最大的财富

没有健康,一切都是浮云

!!!

相关文章:

网络工程师 (7)进程管理

一、进程相关的概念 (一)定义 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,也是操作系统结构的基础。进程是程序的一次执行实例,具有动…...

大屏 UI 设计风格的未来趋势

在科技飞速革新的时代,大屏设备的应用领域不断拓展,从城市的智能交通指挥中心,到商场的互动广告大屏,再到家庭的超大尺寸智能电视,大屏已然成为信息展示与交互的关键载体。大屏 UI 设计风格也随之不断演变,…...

Kmesh v1.0 正式发布

2025 年 1 月 23 日,Kmesh 团队正式发布了 Kmesh v1.0235。Kmesh 作为一款开源的服务网格解决方案,v1.0 版本在网络流量管理领域引入了多项重磅特性2。具体如下134: IPsec 加密通信:引入 IPsec 加密协议,将节点间流量加…...

低代码系统-产品架构案例介绍、轻流(九)

轻流低代码产品定位为零代码产品,试图通过搭建来降低企业成本,提升业务上线效率。 依旧是从下至上,从左至右的顺序 名词概述运维层底层系统运维层,例如上线、部署等基础服务体系内置的系统能力,发消息、组织和权限是必…...

深入理解动态规划(dp)--(提前要对dfs有了解)

前言:对于动态规划:该算法思维是在dfs基础上演化发展来的,所以我不想讲的是看到一个题怎样直接用动态规划来解决,而是说先用dfs搜索,一步步优化,这个过程叫做动态规划。(该文章教你怎样一步步的…...

C++传送锚点的内存寻址:内存管理

文章目录 1.C/C内存分布回顾2.C内存管理2.1 内存申请2.2 operator new与operator delete函数2.3 定位new表达式 3.关于内存管理的常见知识点3.1 malloc/free和new/delete的区别3.2 内存泄漏 希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力! 继C语…...

webAPI -DOM 相关知识点总结(非常细)

title: WebAPI语法 date: 2025-01-28 12:00:00 tags:- 前端 categories:- 前端WEB API 了解DOM的结构并掌握其基本的操作,体验 DOM 在开发中的作用 API简介 就是使用js来操作html和浏览器 什么是DOM? 就是一个文档对象模型,是用来呈现预计于任意htm…...

Deepseek的RL算法GRPO解读

在本文中,我们将深入探讨Deepseek采用的策略优化方法GRPO,并顺带介绍一些强化学习(Reinforcement Learning, RL)的基础知识,包括PPO等关键概念。 策略函数(policy) 在强化学习中, a…...

设计模式的艺术-策略模式

行为型模式的名称、定义、学习难度和使用频率如下表所示: 1.如何理解策略模式 在策略模式中,可以定义一些独立的类来封装不同的算法,每个类封装一种具体的算法。在这里,每个封装算法的类都可以称之为一种策略(Strategy…...

MyBatis 写法

MyBatis 高效使用技巧 常见 MyBatis 使用技巧,这些技巧有助于简化数据库操作,提高开发效率,并增强系统的性能。 1. 动态 SQL 动态 SQL 让开发者能够依据参数灵活地构建 SQL 语句,避免了手动拼接字符串带来的复杂性和错误风险。…...

Git图形化工具【lazygit】

简要介绍一下偶然发现的Git图形化工具——「lazygit」 概述 Lazygit 是一个用 Go 语言编写的 Git 命令行界面(TUI)工具,它让 Git 操作变得更加直观和高效。 Github地址:https://github.com/jesseduffield/lazygit 主要特点 主要…...

K8s运维管理平台 - xkube体验:功能较多

目录 简介Lic安装1、需要手动安装MySQL,**建库**2、启动命令3、[ERROR] GetNodeMetric Fail:the server is currently unable to handle the request (get nodes.metrics.k8s.io qfusion-1) 使用总结优点优化 补充1:layui、layuimini和beego的详细介绍1.…...

5.3.1 软件设计的基本任务

文章目录 软件设计解决的问题概要设计基本任务详细设计基本任务 软件设计解决的问题 需求分析解决“做什么”的问题,软件设计解决“如何做”的问题。软件设计分为概要设计、详细设计两块。概要设计是设计软件和数据的总体框架,比详细设计的颗粒度更大。详…...

Go学习:字符、字符串需注意的点

Go语言与C/C语言编程有很多相似之处,但是Go语言中在声明一个字符时,数据类型与其他语言声明一个字符数据时有一点不同之处。通常,字符的数据类型为 char,例如 :声明一个字符 (字符名称为 ch) 的语句格式为 char ch&am…...

LabVIEW无线齿轮监测系统

本案例介绍了基于LabVIEW的无线齿轮监测系统设计。该系统利用LabVIEW编程语言和改进的天牛须算法优化支持向量机,实现了无线齿轮故障监测。通过LabVIEW软件和相关硬件,可以实现对齿轮箱振动信号的采集、传输和故障识别,集远程采集、数据库存储…...

基于SpringBoot的租房管理系统(含论文)

基于SpringBoot的租房管理系统是一个集订单管理、房源信息管理、屋主申诉处理、用户反馈等多项功能于一体的系统。该系统通过SpringBoot框架开发,拥有完善的管理员后台、屋主管理模块、用户功能模块等,适用于房地产租赁平台或中介公司进行日常管理与运营…...

剑指 Offer II 008. 和大于等于 target 的最短子数组

comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20008.%20%E5%92%8C%E5%A4%A7%E4%BA%8E%E7%AD%89%E4%BA%8E%20target%20%E7%9A%84%E6%9C%80%E7%9F%AD%E5%AD%90%E6%95%B0%E7%BB%84/README.md 剑指 Offer II 008.…...

【微服务与分布式实践】探索 Eureka

服务注册中心 心跳检测机制:剔除失效服务自我保护机制 统计心跳失败的比例在15分钟之内是否低于85%,如果出现低于的情况,Eureka Server会将当前的实例注册信息保护起来,让这些实例不会过期。当节点在短时间内丢失过多的心跳时&am…...

关于opencv环境搭建问题:由于找不到opencv_worldXXX.dll,无法执行代码,重新安装程序可能会解决此问题

方法一:利用复制黏贴方法 打开opencv文件夹目录找到\opencv\build\x64\vc15\bin 复制该目录下所有文件,找到C:\Windows\System32文件夹(注意一定是C盘)黏贴至该文件夹重新打开VS。 方法二:直接配置环境 打开opencv文…...

重构字符串(767)

767. 重构字符串 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; class Solution { public:string reorganizeString(string s){string res;//因为1 < s.length < 500 &#xff0c; uint64_t 类型足够uint16_t n s.size();if (n 0) {return res;}unordere…...

【MQ】如何保证消息队列的高性能?

零拷贝 Kafka 使用到了 mmap 和 sendfile 的方式来实现零拷贝。分别对应 Java 的 MappedByteBuffer 和 FileChannel.transferTo 顺序写磁盘 Kafka 采用顺序写文件的方式来提高磁盘写入性能。顺序写文件&#xff0c;基本减少了磁盘寻道和旋转的次数完成一次磁盘 IO&#xff0…...

通义灵码插件保姆级教学-IDEA(安装及使用)

一、JetBrains IDEA 中安装指南 官方下载指南&#xff1a;通义灵码安装教程-阿里云 步骤 1&#xff1a;准备工作 操作系统&#xff1a;Windows 7 及以上、macOS、Linux&#xff1b; 下载并安装兼容的 JetBrains IDEs 2020.3 及以上版本&#xff0c;通义灵码与以下 IDE 兼容&…...

babylon.js-3:了解STL网格模型

网格模型上色 本篇文章主要介绍如何在 BabylonJS 中实现STL网格模型上色。 文章目录 网格模型上色运用场景概要延申正文加载器库的支持认识 OBJ 和 STL 文件GUI 色板选择器网格模型异步加载加载动画网格模型上色官方即将弃用 ImportMesh 而推荐使用 ImportMeshAsync 说明OBJ …...

面向对象设计(大三上)--往年试卷题+答案

目录 1. UML以及相关概念 1.1 动态图&静态图 1.2 交互图 1.3 序列图 1.4 类图以及关联关系 1.4.1类图 1.4.2 关系类型 (1) 用例图中的包含、扩展关系(include & extend) (2) 类图中的聚合、组合关系(aggragation & composition) 1.5 图对象以及职责划…...

Java基础知识总结(二十四)--Collections

它的出现给集合操作提供了更多的功能。这个类不需要创建对象&#xff0c;内部提供的都是静态方法。 静态方法&#xff1a; Collections.sort(list);//list集合进行元素的自然顺序排序。 Collections.sort(list,new ComparatorByLen());//按指定的比较器方法排序。 class Co…...

大语言模型的API接口如何操作

选择大语言模型 根据自身需求和应用场景选择合适的大语言模型&#xff0c;如 OpenAI 的 GPT 系列、百度的文心一言、智谱的 GLM 等。需要考虑模型的性能、功能特点、适用领域、成本等因素。 获取 API 密钥和凭证 注册账号&#xff1a;访问所选大语言模型的官方平台或相关开发…...

【漫话机器学习系列】067.希腊字母(greek letters)-写法、名称、读法和常见用途

希腊字母&#xff08;Greek Letters&#xff09; 希腊字母在数学、科学、工程学和编程中广泛使用&#xff0c;常用于表示变量、常量、参数、角度等。以下是希腊字母的完整列表及其常见用途。 大写与小写希腊字母表 大写小写名称&#xff08;英文&#xff09;名称&#xff08;…...

Kotlin判空辅助工具

1&#xff09;?.操作符 //执行逻辑 if (person ! null) {person.doSomething() } //表达式 person?.doSomething() 2&#xff09;?:操作符 //执行逻辑 val c if (a ! null) {a } else {b } //表达式 val c a ?: b 3&#xff09;!!表达式 var message: String? &qu…...

【Python-办公自动化】实现自动化输出json数据类型的分析报告和正逆转换

分析报告 import json from pprint import pprint, PrettyPrinterdef analyze_energy_data(file_path):"""能源数据分析与结构查看函数参数:file_path (str): JSON文件路径功能:1. 加载并解析JSON数据2. 显示数据结构概览3. 交互式结构探索"""…...

深入理解指针(2)

数组名的理解 什么是数组名&#xff1f;在计算机编程中&#xff0c;数组名是用于标识一个数组的名称。那应当如何来理解数组名呢&#xff1f;事实上&#xff0c;在数组中数组名就是数组首元素的地址。 示例1&#xff1a; #include<stdio.h> int main() {int arr[10] …...

SOME/IP--协议英文原文讲解3

前言 SOME/IP协议越来越多的用于汽车电子行业中&#xff0c;关于协议详细完全的中文资料却没有&#xff0c;所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块&#xff1a; 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 Note: Thi…...

计算机网络之计算机网络主要性能

一、速率与带宽 速率&#xff1a; 定义&#xff1a;数据的传送速率&#xff0c;也称数据率或比特率&#xff0c;表示单位时间内传输的比特数。 单位&#xff1a;比特/秒&#xff08;bit/s&#xff09;&#xff0c;常用单位有千比特/秒&#xff08;kb/s&#xff09;、兆比特/秒…...

家居 EDI:Haverty‘s EDI 需求分析

Havertys 成立于 1885 年&#xff0c;是一家历史悠久的美国家具零售商。公司致力于为客户提供高品质的家具和家居饰品&#xff0c;其产品线涵盖客厅、卧室、餐厅及办公家具等多个领域。 电子数据交换&#xff08;EDI&#xff09;是一种通过标准化电子格式在商业伙伴之间进行数据…...

JavaScript - Web APIs(上)

Web API 介绍 严格意义上讲&#xff0c;我们在 JavaScript 阶段学习的知识绝大部分属于 ECMAScript 的知识体系&#xff0c;ECMAScript 简称 ES 它提供了一套语言标准规范&#xff0c;如变量、数据类型、表达式、语句、函数等语法规则都是由 ECMAScript 规定的。浏览器将 ECM…...

【漫话机器学习系列】068.网格搜索(GridSearch)

网格搜索&#xff08;Grid Search&#xff09; 网格搜索&#xff08;Grid Search&#xff09;是一种用于优化机器学习模型超参数的技术。它通过系统地遍历给定的参数组合&#xff0c;找出使模型性能达到最优的参数配置。 网格搜索的核心思想 定义参数网格 创建一个包含超参数值…...

MySQL 的索引类型【图文并茂】

基本分类 文本生成MindMap:https://app.pollyoyo.com/planttext <style> mindmapDiagram {node {BackgroundColor yellow}:depth(0) {BackGroundColor SkyBlue}:depth(1) {BackGroundColor lightGreen} } </style> * MySQL 索引** 数据结构角度 *** B树索引*** 哈…...

OSCP:发送钓鱼电子邮件执行客户端攻击

概述 在渗透测试领域&#xff0c;钓鱼攻击是一种有效的客户端攻击手段&#xff0c;尤其在目标用户缺乏安全意识或系统存在未修复漏洞时&#xff0c;成功率较高。针对Windows平台&#xff0c;滥用Windows库文件&#xff08;.Library-ms&#xff09;是一种技术性较强但易于实施的…...

Oracle 普通用户连接hang住处理方法

一、现象说明 $ sqlplus / as sysdbaSQL*Plus: Release 19.0.0.0.0 - Production on Wed Dec 18 16:49:19 2024 Version 19.11.0.0.0Copyright (c) 1982, 2020, Oracle. All rights reserved.Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Pro…...

C++ ——— 学习并使用 priority_queue 类

目录 何为 priority_queue 类 学习并使用 priority_queue 类 实例化一个 priority_queue 类对象 插入数据 遍历堆&#xff08;默认是大堆&#xff09; 通过改变实例化的模板参数修改为小堆 何为 priority_queue 类 priority_queue 类为 优先级队列&#xff0c;其本质就是…...

JVM--类加载器

概念 类加载器&#xff1a;只参与加载过程中的字节码获取并加载到内存中的部分&#xff1b;java虚拟机提供给应用程序去实现获取类和接口字节码数据的一种技术&#xff0c;也就是说java虚拟机是允许程序员写代码去获取字节码信息 类加载是加载的第一步&#xff0c;主要有以下三…...

【C++】类与对象初级应用篇:打造自定义日期类与日期计算器(2w5k字长文附源码)

文章目录 一、日期类的实现1. 日期类的默认成员函数的分析与实现构造函数其它默认成员函数 2. 各种逻辑比较运算符重载3. 日期加与减天数日期加天数系列日期减天数系列日期加减天数的最后修定和- -系列 4. 日期减日期方法一方法二 5. 流插入与流提取重载流插入重载流提取重载(含…...

ROS应用之SwarmSim在ROS 中的协同路径规划

SwarmSim 在 ROS 中的协同路径规划 前言 在多机器人系统&#xff08;Multi-Robot Systems, MRS&#xff09;中&#xff0c;SwarmSim 是一个常用的模拟工具&#xff0c;可以对多机器人进行仿真以实现复杂任务的协同。除了任务分配逻辑以外&#xff0c;SwarmSim 在协同路径规划方…...

Shell特殊位置变量以及常用内置变量总结

目录 1. 特殊的状态变量 1.1 $?&#xff08;上一个命令的退出状态&#xff09; 1.2 $$&#xff08;当前进程的 PID&#xff09; 1.3 $!&#xff08;后台进程的 PID&#xff09; 1.4 $_&#xff08;上一条命令的最后一个参数&#xff09; 2.常用shell内置变量 2.1 echo&…...

【ollama通过命令行启动后如何在网页端查看运行】

ollama通过命令行启动后如何在网页端查看运行 http://localhost:11434/...

【MySQL】初始MySQL、库与表的操作

目录 基本使用 使用案例 SQL分类 存储引擎 库的操作 字符集和校验规则 查看系统默认字符集和校验规则 查看数据库支持的字符集 查看数据库支持的字符集校验规则 指定编码常见数据库 校验规则对数据库的影响 操纵数据库 库的备份与恢复 表的操作 创建表 查看表 …...

信息学奥赛一本通 1342:【例4-1】最短路径问题

【题目描述】 平面上有n个点&#xff08;n<100&#xff09;&#xff0c;每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。 若有连线&#xff0c;则表示可从一个点到达另一个点&#xff0c;即两点间有通路&#xff0c;通路的距离为两点间的直线距离。现在的任务是…...

芯片AI深度实战:基础篇之langchain

基于ollama, langchain,可以构建一个自己的知识库&#xff0c;比如这个 Build Your Own RAG App: A Step-by-Step Guide to Setup LLM locally using Ollama, Python, and ChromaDB | HackerNoon 这是因为&#xff1a; 以上范例就实现了这样一个流程&#xff1a; 系列文章&…...

Autogen_core 测试代码:test_cache_store.py

目录 原始代码测试代码代码中用到的typing注解 原始代码 from typing import Dict, Generic, Optional, Protocol, TypeVarT TypeVar("T")class CacheStore(Protocol, Generic[T]):"""This protocol defines the basic interface for store/cache o…...

AI大模型开发原理篇-1:语言模型雏形之N-Gram模型

N-Gram模型概念 N-Gram模型是一种基于统计的语言模型&#xff0c;用于预测文本中某个词语的出现概率。它通过分析一个词语序列中前面N-1个词的出现频率来预测下一个词的出现。具体来说&#xff0c;N-Gram模型通过将文本切分为长度为N的词序列来进行建模。 注意&#xff1a;这…...

Haproxy入门学习二

一、Haproxy的算法 1.haproxy通过固定参数balance指明对后端服务器的调度算法&#xff0c;其中balance参数可以配置在listen或backend选项中 2.haproxy的调度算法分为静态和动态调度算法&#xff0c;其中有些算法可以根据参数在静态和动态算法中相互转换 3.静态算法&#xff1a…...