加里·基尔代尔:CP/M之父与个人计算时代的先驱
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》
创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)
加里·基尔代尔:CP/M之父与个人计算时代的先驱
一、早年生活与教育背景
1. 家庭背景
加里·阿伦·基尔代尔(Gary Arlen Kildall)1942年5月19日出生于美国华盛顿州西雅图市,他的父亲约瑟夫·基尔代尔(Joseph Kildall)是一位挪威血统的船长,家族经营一所航海学校。
他的母亲艾玛有一半的瑞典血统,他的祖母出生在瑞典斯凯勒夫特奥市的朗贝克,23岁时移民到了加拿大。这样的家庭背景为基尔代尔提供了独特的成长环境,在西雅图的雨城,年轻的基尔代尔对电子设备产生了浓厚的兴趣。
图片:加里·基尔代尔
2. 学术之路
基尔代尔在西雅图度过了童年,对电子学和计算有着天生的好奇心。他后来进入华盛顿大学攻读计算机科学专业,在那里他的创新天赋开始展露头角。在华盛顿大学期间,他对计算机科学的热情和创新能力开始扎根发展。毕业后,他短暂地回到华盛顿大学,并于1972年获得了计算机科学博士学位。在此期间,英特尔公司借给他使用8008和8080处理器的系统,为他后来的技术发展奠定了基础。
二、技术创新与CP/M的诞生
1. 从PL/M到CP/M
作为英特尔公司的顾问,基尔代尔编写了关键的编程语言工具,支持该公司在1971年推出的微处理器芯片。1973年,基尔代尔开发了第一种面向微处理器的高级编程语言PL/M(Programming Language for Microcomputers),同年他与Kathryn Strutynski一起开发了PL/M语言来生产CP/M,这是个人计算机最早的操作系统之一。
2. CP/M的突破性意义
1974年,基尔代尔发明了CP/M(Control Program for Microcomputers),这是第一个能够在新兴桌面平台上运行的操作系统。不久之后,他创建了BIOS(Basic Input Output System),使CP/M能够轻松与不同的计算机硬件接口。CP/M很快成为早期个人电脑领域的事实标准操作系统。
CP/M被形象地描述为一个"软件总线",允许多个程序以标准化的方式与不同的硬件交互。为CP/M编写的程序通常可以在不同的机器上移植,通常只需要指定控制屏幕和打印机的转义序列。这种可移植性使CP/M大受欢迎,为CP/M编写的软件比仅在一种硬件上运行的操作系统要多得多。
三、Digital Research公司的创立与发展
1. 公司的诞生
基尔代尔和他的妻子多萝西(Dorothy)建立了一家公司,最初叫做"星际数字研究"(Intergalactic Digital Research),后来改名为数字研究公司(Digital Research, Inc.),通过在业余爱好者杂志上刊登广告来推广CP/M操作系统。
图片:Digital Research
2. CP/M的商业成功
Digital Research为IMSAI 8080(Altair 8800的一个流行克隆版)授权使用CP/M。随着更多制造商获得CP/M许可,它成为了一个事实上的标准,并且必须支持越来越多的硬件变种。为了解决这个问题,基尔代尔开创了BIOS的概念,这是一组存储在计算机硬件(ROM或EPROM芯片)中的简单程序,使CP/M能够在不同系统上运行而无需修改。
3. 高峰时期
到1981年,在其受欢迎程度的巅峰时期,CP/M在3000种不同的计算机型号上运行,DRI(Digital Research, Inc.)的年收入达到540万美元。CP/M成为了早期个人计算机行业的关键组成部分,为后来的操作系统发展奠定了基础。
四、与IBM和Microsoft的故事
1. 关键的错失机会
1980年,盖瑞曾飞往奥克兰与一位重要客户会面,按计划返回讨论技术问题。会议最终因财务条件而陷入僵局。IBM希望完全购买CP/M,而DRI则寻求按复制付费的版税,以保护其现有的业务基础。这次会面的失败为后来的个人计算机行业格局带来了深远影响。
2. 误传与事实
关于基尔代尔与IBM会面的故事有很多误传。科技行业的一个都市传说称,基尔代尔去飞行而不是与IBM会面,因此导致IBM推广微软的劣质操作系统,改变了计算机历史的进程。这个故事是不真实的。实际上,谈判失败的原因更为复杂,涉及到商业模式和技术路线的分歧。
3. 微软崛起的转折点
在与DRI的谈判陷入僵局后,盖茨尝试直接购买CP/M,但基尔代尔拒绝了,而是以每份2.50美元的价格出售了10,000个许可证。随后,IBM转向了由比尔·盖茨和保罗·艾伦领导的微软公司,这一决定最终使MS-DOS成为了个人电脑的标准操作系统,而CP/M的影响力逐渐减弱。
五、技术贡献与创新精神
1. 操作系统的革命性设计
在基尔代尔开发CP/M之前,计算机制造商提供的专有应用软件只能在他们自己的硬件上工作。所有程序都必须从头开始编写,才能在每个独特的机器配置上运行。CP/M的设计改变了这一点,它允许使用英特尔8080微处理器的任何制造商的计算机系统运行第三方供应商编写的应用程序。
2. BIOS的创新
基尔代尔的BIOS概念是他最重要的技术贡献之一。1976年的1.3版是第一个包含BIOS(Basic Input Output System)代码的版本,这使得为不同的计算机修改软件变得容易。这一创新使得硬件独立性成为可能,极大地促进了个人计算机产业的发展。
3. 教育与分享精神
基尔代尔对编程语言的教育从未减弱!他始终致力于教育他人关于编程语言的知识;领导专门针对教学学生编码和软件工程领域原理的研讨会!这种在渴望学习者中分享知识的渴望,说明了他的使命远超过了通常在其他行业看到的单纯利润最大化目标。
六、晚年生活与遗产
1. 电视节目与公众教育
在20世纪80年代,基尔代尔还在PBS上担任《计算机编年史》(Computer Chronicles)的联合主持人,这是一个每周信息节目,报道个人计算领域的最新发展。通过这个平台,他向更广泛的公众传播了计算机知识,推动了个人计算机的普及。
2. 不幸离世
1994年7月11日,加里·基尔代尔,这位美国计算机科学家,Digital Research的创始人,在52岁时不幸离世(生于1942年)。尽管他的生命相对短暂,但他在个人计算机行业的开创性工作为后来的技术发展奠定了坚实的基础。
3. 技术遗产与荣誉
1995年3月,基尔代尔被软件出版商协会(SPA)追授荣誉,表彰他对微型计算机行业的贡献:第一种专门为微处理器设计的编程语言和编译器:PL/M(1973年);第一个微处理器磁盘操作系统,最终售出四分之一百万份:CP/M(1974年);通过在一组BIOS例程中隔离系统特定的硬件接口,创建了第一个成功的开放系统架构(1975年)。
七、对今日计算机世界的影响
1. 开放标准的先驱
基尔代尔对计算机科学的影响至今仍然深远。他在创建用户友好的操作系统和软件方面的开创性努力彻底改变了人们与计算机互动的方式。基尔代尔的遗产作为创新力量的证明,为未来几代计算机科学家和创新者提供了灵感来源。
2. 现代操作系统的基础
50年前,个人电脑软件先驱加里·基尔代尔"在加利福尼亚州太平洋格罗夫演示了CP/M,这是第一个商业上成功的个人电脑操作系统"。这一创新为后来的Windows、macOS和Linux等现代操作系统奠定了概念基础,尤其是在硬件抽象和系统架构方面。
3. 创新精神的传承
基尔代尔的创新操作系统CP/M成为早期个人电脑的基石。他与早期PC制造商的合作帮助确立了CP/M作为微型计算机操作系统的流行选择。CP/M的成功一飞冲天,其用户友好的界面和广泛的兼容性使其成为许多计算机用户的首选。这种创新和开放的精神,至今仍然是科技行业的重要价值观。
八、结语:被低估的计算机革命英雄
加里·基尔代尔是个人计算机行业的创始人之一,但你可能不知道他的名字。那些听说过他的人可能会想起那个他"错过"成为比尔·盖茨的机会的神话,因为他去飞行而不是与IBM会面。然而,真相比这个简化的故事要复杂得多。
基尔代尔的技术远见和创新精神为个人计算机时代的到来铺平了道路。他创造的CP/M和BIOS概念至今仍然影响着计算机架构。在追逐商业成功的科技行业中,基尔代尔的动机是技术卓越,而不是主宰他的同胞。这种纯粹的技术创新精神,使他成为了一位被低估的计算机革命英雄,他的遗产将继续启发未来的创新者。
专栏✅:《计算机名人堂》,欢迎订阅催更,谢谢大家支持!
创作者:Code_流苏(CSDN)
相关文章:
加里·基尔代尔:CP/M之父与个人计算时代的先驱
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 加里基尔代尔:CP/M之父与个人计算时代的先驱 一、早年生活与教育背景 1.…...
深入解析Spring Boot配置处理器:机制、架构与实践
深入解析Spring Boot配置处理器:机制、架构与实践 Spring Boot的配置处理器(spring-boot-configuration-processor)是支撑其智能配置体验的关键组件。本文结合实际开发需求,从使用方式、底层原理到性能优化与架构设计,…...
Ragflow新建的知识库完成后刷新却没有显示,报错MethodNotAllowed: 405 Method Not Allowed:
环境: Ragflow17.2 debian12.8 问题描述: Ragflow新建的知识库完成后刷新却没有显示,报错MethodNotAllowed: 405 Method Not Allowed: The method is not allowed for the requested URL. 后台日志: 2025-04-25 13:54:25,988 ERROR 235204 405 Method Not Allowed:…...
Maven进阶知识
一、Maven 坐标 (一)概念 在 Maven 中坐标是构件的唯一标识,其元素包括 groupId、artifactId、version、packaging、classifier。其中 groupId、artifactId、version 是必定义项,packaging 默认为 jar。 (二&#x…...
通过门店销售明细表用SQL得到每月每个门店的销冠和按月的同比环比数据
假设我在Snowflake里有销售表,包含ID主键、门店ID、日期、销售员姓名和销售额,需要统计出每个月所有门店和各门店销售额最高的人,不一定是一个人,以及他所在的门店ID和月总销售额。 统计每个月份下,各门店内销售额最高…...
聊聊Spring AI Alibaba的YuQueDocumentReader
序 本文主要研究一下Spring AI Alibaba的YuQueDocumentReader YuQueDocumentReader community/document-readers/spring-ai-alibaba-starter-document-reader-yuque/src/main/java/com/alibaba/cloud/ai/reader/yuque/YuQueDocumentReader.java public class YuQueDocument…...
Tauri文件系统操作:桌面应用的核心能力(入门系列四)
今天我们来聊聊Tauri中一个超级重要的功能 - 文件系统操作。这可是Web应用和桌面应用最大的区别之一。在浏览器里,出于安全考虑,我们对文件系统的访问被限制得死死的。但在Tauri桌面应用中,我们可以安全地访问用户的文件系统,这简…...
网络流之最大流(Dinic)
正文 在了解了Ford-Fulkerson 和Edmonds-Karp之后,我们可以进一步学习更高效的算法——Dinic。 Dinic算法的时间复杂度是O(VE),实际运用过程中是比EK算法快的。 特性Ford-FulkersonEdmonds-Karp (EK)Dinic 增广路径选择 任意方式BFS找最短路径分层图多…...
LVGL模拟器:NXP GUIDER+VSCODE
1. 下载安装包 NXP GUIDER:GUI Guider | NXP 半导体 CMAKE:Download CMake MINGW:https://github.com/niXman/mingw-builds-binaries/releases SDL2:https://github.com/libsdl-org/SDL/releases/tag/release-2.30.8 VSCODE&…...
魔幻预言手游》:职业介绍!
在《魔幻预言》手游中,共有武玄、魔魅、剑仙三大核心职业,各具特色且定位鲜明,以下为具体介绍: 一、武玄(战士) 核心定位:近战物理输出与团队增益担当,兼具控制与防御能力。 战斗风…...
什么时候使用Python 虚拟环境(venv)而不用conda
是的!python3.9 -m venv rtdetr_env 是 Python 原生的虚拟环境(venv),而 conda 是另一个流行的虚拟环境管理工具(来自 Anaconda/Miniconda)。下面我会详细对比两者的区别,并讲解 venv 的基本用法…...
Vue3的内置组件 -实现过渡动画 TransitionGroup
Vue3的内置组件 -实现过渡动画 TransitionGroup 是一个内置组件,用于对 v-for 列表中的元素或组件的插入、移除和顺序改变添加动画效果 支持和 基本相同的 props、CSS 过渡 class 和 JavaScript 钩子监听器,但有以下几点区别: 默认情况下&…...
水果成篮--LeetCode
题目 你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 。 你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水…...
ROS 快速入门教程05
15. IMU航向锁定的节点 编写锁定节点 打开vscode编写imu_node.cpp #include<ros/ros.h> #include<sensor_msgs/Imu.h> #include<tf/tf.h> #include<geometry_msgs/Twist.h>ros::Publisher vel_pub;void IMUCallback(sensor_msgs::Imu msg) {if(msg.o…...
用 C 语言实现通用的冒泡排序算法
在日常编程中,排序算法是一个非常常见且重要的工具。虽然有许多排序算法可以选择,但如果你需要一个能够处理不同数据类型的排序算法,如何设计一个通用的排序算法呢?今天我们将实现一个通用的冒泡排序算法,支持不同数据…...
Linux——进程间通信
目录 1. 进程间通信的介绍 1.1 概念 1.2 目的 1.3 进程间通信的本质 1.4 进程间通信的分类 2. 管道 2.1 概念 2.2 匿名管道 2.2.1 原理 2.2.2 pipe函数 2.2.3 匿名管道使用步骤 2.2.4 管道读写规则 2.2.5 管道的特点 2.2.6 管道的四种特殊情况 2.2.7 管道的…...
深入详解人工智能数学基础——微积分中拉格朗日乘数法在GAN训练中的应用
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用…...
精益数据分析(26/126):依据商业模式确定关键指标
精益数据分析(26/126):依据商业模式确定关键指标 在创业与数据分析的探索之路上,每一次的学习都像是为前行点亮一盏灯。今天,我们依旧怀揣着共同进步的期望,深入解读《精益数据分析》的相关内容࿰…...
前端面试宝典---vue原理
vue的Observer简化版 class Observer {constructor(value) {if (!value || typeof value ! object) returnthis.walk(value) // 对对象的所有属性进行遍历并定义响应式}walk (obj) {Object.keys(obj).forEach(key > defineReactive(obj, key, obj[key]))} } // 定义核心方法…...
Cribl 上传lookup 表,传入数据进event
cribl 插入lookup 表,来数据有针对性的插入字段,对event 的数据进行字段插入。灵活性强。 The Lookup At long last, were ready to configure the lookup. First, lets create the Lookup table wed like to use. Getting the goods 先下载一个lookup 表,然后上传到cri…...
使用 binlog2sql 闪回 MySQL8 数据
【说明】 MySQL服务器版本 8.0.26 mysql> SELECT version(); ----------- | version() | ----------- | 8.0.26 | -----------Python 版本 Python 3.8.10 [infuq ~]# python -V Python 3.8.10【安装】 binlog2sql 官方地址 1.安装 binlog2sql [infuq ~]# git clone …...
蓝桥杯赛场反思:技术与心态的双重修炼
蓝桥杯赛场反思:技术与心态的双重修炼 在刚刚结束的第十六届蓝桥杯大赛软件赛省赛第二场中,我经历了一场充满挑战与自我审视的旅程。走出赛场,内心既有些许成就感,也夹杂着对自身不足的深刻反思。这次比赛不仅是一次技术的较量&a…...
介绍常用的退烧与消炎药
每年春夏交替之季,是感冒发烧、咳嗽、咽喉肿痛、支气管炎、扁桃体炎的高发期。在家里或公司,常备几种预防感冒发烧、咳嗽、流鼻涕、咽喉发炎的药品,是非常必要的。下面介绍几款效果非常明显的中成药、西药,具体如下。 1 莲芝消炎…...
C++篇——继承
目录 引言 1.继承的概念及定义 1_1,继承的概念 1_2, 继承定义 1_2_1,继承关系和访问限定符 1_2_2,继承基类成员访问方式的变化 2.基类和派生类对象赋值转换 3.继承中的作用域 4.派生类的默认成员函数 构造函数 拷贝构造…...
C++ 基础综合练习案例01:联系人管理系统(Part01)
通讯录是一个可以记录亲人、好友信息的工具。 本教程主要利用C来实现一个通讯录管理系统 系统中需要实现的功能如下: * 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人…...
Trae 宝藏功能实测:从 Mcp 搭建天气系统,到 AI 重塑 Excel 数据处理
本文 利用trae以及第三方MCP Server搭建一个天气系统网页前言链接高德地图MCP链接quickchart-server MCP Server链接EdgeOne Pages Deploy MCP智能体的创建天气系统效果展示 利用trae做一个Excel格式化工具前言使用trae完成代码的实现总结 我正在参加Trae「超级体验官」创意实践…...
MCP与Sequential Thinking:系统问题的分解与解决之道
MCP与Sequential Thinking:系统问题的分解与解决之道 引言:复杂问题背后的逻辑思维 在面对复杂问题时,我们常常感到手足无措,尤其是在需要将任务分解为多个步骤时。这是对个人思维能力的极大挑战,而掌握有效的思维工具则可以让事情事半功倍。今天我们讨论的两个工具:MC…...
Scrapy爬取动态网页:简洁高效的实战指南
引言 动态网页依赖JavaScript加载,传统爬虫望而却步。Scrapy搭配scrapy-splash却能轻松破局!本文通过一个原创案例,带你用Scrapy和Splash高效爬取动态网页,代码简洁、可运行,从零基础到进阶开发者都能快速上手。无论是数据采集还是自动化任务,这篇指南让你一学即会,开启…...
在 Linux 上安装 PNPM 的教程
在 Linux 上安装 PNPM 的教程 PNPM(Performant NPM)是一个非常快速的包管理器,作为 npm 的替代品,PNPM 在安装速度和磁盘占用方面都具有显著优势。PNPM 通过“硬链接”共享依赖来节省磁盘空间,并且比 npm 更加高效。本…...
Vue3 组件通信与插槽
Vue3 组件通信方式全解(10种方案) 一、组件通信方式概览 通信方式适用场景数据流向复杂度Props/自定义事件父子组件简单通信父 ↔ 子⭐v-model 双向绑定父子表单组件父 ↔ 子⭐⭐Provide/Inject跨层级组件通信祖先 → 后代⭐⭐事件总线任意组件间通信任…...
php一些命名规范 和 css命名规范
一 php命名规范 $myName bill gates;$yourFamilyName ggbone; 1.1 变量命名 变量以美元符号 $ 开头, 第一个字符不可以是数字 ,除了下划线_ 不能有任何符号 $name bill;$age 33; 当用2个或2个以上的单词命名变量时,可以使用驼峰法规则(…...
【TypeScript】速通篇
目录 0 前言 1 准备工作 1.1 安装typescript包 1.2 简化运行TS 2 类型注解 2.1 常用类型 2.1.1 原始类型 2.1.2 数组类型 2.1.3 联合类型 2.1.3.1 类型别名 2.1.4 函数类型 2.1.4.1 void类型 2.1.4.2 可选参数 2.1.5 对象类型 2.1.5.1 可选属性 2.1.5.2 接口 2.…...
flutter 引擎初始化
在 Flutter 混合开发中,iOS 端的 Flutter 引擎初始化时机 取决于集成方式(纯 Flutter 或混合开发)。以下是详细分析: 1. 纯 Flutter 应用(默认 Flutter App) 初始化时机 启动…...
Spring Boot 连接 Microsoft SQL Server 实现登录验证
Spring Boot 连接 Microsoft SQL Server 实现登录验证 这篇文章将非常系统地讲解如何使用 Spring Boot 结合 Microsoft SQL Server 2019 完成一个完整的登录验证系统,包括数据库连接问题、SSL证书错误处理、CORS跨域详细解释和解决方案。 适合需要前后端联调、单独…...
腾讯云智三道算法题
import java.math.BigDecimal; import java.math.BigInteger; import java.util.*;public class MyMain {//第一题:一个水果切成n块public static void getRes(int n, int l, int r){int min -1;int max -1;for (int il;i<r;i){if (i%n0){min i/n;break;}}for…...
语音合成之七语音克隆技术突破:从VALL-E到SparkTTS,如何解决音色保真与清晰度的矛盾?
从VALL-E到SparkTTS,如何解决音色保真与清晰度的矛盾? 引言语音克隆技术发展史YourTTS:深入剖析架构与技术VALL-E:揭秘神经编解码语言模型MaskGCTSparkTTS:利用 LLM 实现高效且可控的语音合成特征解耦生成式模型特征解…...
【Pandas】pandas DataFrame rdiv
Pandas2.2 DataFrame Binary operator functions 方法描述DataFrame.add(other)用于执行 DataFrame 与另一个对象(如 DataFrame、Series 或标量)的逐元素加法操作DataFrame.add(other[, axis, level, fill_value])用于执行 DataFrame 与另一个对象&…...
maven打包时配置多环境参数
1. pom配置 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.…...
【Linux】基本指令(下)
目录 一、详解指令补充知识1:什么是压缩 19. zip 指令(1)-r 选项(2)zip 和 unzip 的安装 20. unzip 指令(1)-d 选项补充知识2:本地机器与云服务器补充知识3:本地机器与云…...
NVLink、UALink 崛起,PCIe Gen6 如何用 PAM4 迎战未来?
现在数字经济发展地相当快速,像Cloud、现在火红的AI、大数据这些新技术都需要在数据中心里运行更多运算,伴随而来的是更快的数据传输速度的需求。 在数据中心,有很多条数据传输路径,举例 : Server 和Storage之间&…...
23种设计模式-行为型模式之迭代器模式(Java版本)
Java 迭代器模式(Iterator Pattern)详解 🧠 什么是迭代器模式? 迭代器模式是一种行为型设计模式,它提供一种方法顺序访问一个聚合对象中的各个元素,而不暴露该对象的内部表示。 🎯 使用场景 …...
指标监控:Prometheus 结合 Grafana,监控redis、mysql、springboot程序等等
软件作用说明 Prometheus:采集各种指标数据(如CPU、内存、请求数),并存储到时序数据库中。Grafana:数据可视化,生成监控仪表盘。 架构说明 被监控服务(如Redis/MySQL/SpringBoot&a…...
微信小程序,基于uni-app的轮播图制作,调用文件中图片
以便捷为目的,想使用文件中的图片制作轮播图 但网上找到的都是轮播图彼此分割,没有使用数组存储在一起,不便于管理,代码不美观简洁 作者使用文件中的图片,并使用数组制作轮播图的具体操作如下:࿰…...
未来医院已来:AI如何实现无死角安全监控
AI智慧医院如何用算法守护安全与效率 ## 背景:医疗场景的智能化转型需求 现代医院作为人员密集、场景复杂的公共场所,面临诸多管理痛点:患者跌倒可能延误救治、医闹事件威胁安全、医疗垃圾处置不当引发感染风险、重点区域(如药…...
搭建动态SQL取数
日常取数的时候可能会存在动态SQL的问题,比如取数动态或者条件动态等情况,下面针对动态SQL做一个完整的处理。包括SELECT 、FROM、WHERE 以及 最后table的动态。 首先 数据定义,这里全按照表来append处理 TYPES:BEGIN OF ty_data,edpline T…...
Python函数基础:简介,函数的定义,函数的调用和传入参数,函数的返回值
目录 函数简介 函数定义,调用,传入参数,返回值 函数的定义 函数的调用和传入参数 函数的返回值 函数简介 函数简介:函数是组织好,可重复使用,用来实现特定功能(特定需求)的代码…...
下垂控制属于构网型控制技术
下垂控制属于构网型控制,而非跟网型控制。 一、构网型与跟网型控制的本质区别 控制策略差异 构网型控制(Grid-Forming Control, GFM): 通过模拟同步发电机的特性(如转子运动方程),自主构建电压幅…...
主流 LLM 部署框架
主流 LLM 部署框架 框架主要特点适用场景vLLM- 超快推理(高吞吐) - 动态批处理 - 支持 HuggingFace Transformer - 支持 PagedAttention高并发、低延迟在线推理TGI (Text Generation Inference)- Huggingface官方出品 - 多模型管理 - 支持动态量化 - 支持…...
数据库系统概论(四)关系操作,关系完整性与关系代数
数据库系统概论(四)详细讲解关系操作,关系完整性与关系代数 前言一、什么是关系操作1.1 基本的关系操作1.2 关系数据语言的分类有哪些 二、关系的完整性2.1 实体完整性2.2 参照完整性2.3 用户的定义完整性 三、关系代数是什么3.1 传统的集合运…...
C#里使用libxl来加载网络传送过来的EXCEL文件
从服务器传送过来的数据,是一个EXCEL文件, 那么怎么样获取里面的数据比较合适呢? 是不是把数据先保存到文件,再使用传统的方式打开它呢? 其实这样做,也是可以的,对于比较大的文件来说。 如果文件比较小,就不必要这样做了,可以直接保存在内存,然后使用函数LoadRaw…...