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

存储块的获取与释放

目录

获取存储块

释放存储块

设计实现


获取存储块

空闲存储块直接取出空闲块

空闲存储块任务进入等待队列

释放存储块

任务等待插入空闲链表

任务等待释放等待队列头部的任务

设计实现

  • 获取存储块(先检查是否有空闲存储块,有则取出一个;没有则将任务插入事件队列中,再执行一次事件调度以便于切换到其他任务,切换回来时从tTask中取出获得的消息,返回取出等待结果)
  • 无等待获取存储块(没有空闲存储块直接返回资源不可用,不会阻塞任务运行)
  • 释放存储块(有任务等待则唤醒位于队列首部也就是最先等待的任务,如果这个任务的优先级更高,则执行调度切换过去;没有任务等待着将存储块插入队列中)

tMemBlock.c

#include "tinyOS.h"/* 存储块初始化函数 */
//参数:存储块,存储块分配空间的起始地址,存储块的大小,存储块的数量
void tMemBlockInit(tMemBlock *memBlock, uint8_t *memStart, uint32_t blockSize, uint32_t blockCnt)
{uint8_t *memBlockStart = (uint8_t *)memStart;									//存储空间的起始地址uint8_t *memBlockEnd = memBlockStart + blockSize * blockCnt;	//存储空间的结束地址//对存储空间进行划分时,划分的每一个存储块的大小会作为链表的结点插入链表中,这个链表结点会占用存储块开始的一部分空间,所以要求blockSize不能小于结点大小if(blockSize < sizeof(tNode)){return;}tEventInit(&memBlock->event, tEventTypeMemBlock);memBlock->memStart = memStart;memBlock->blockSize = blockSize;memBlock->maxCount = blockCnt;tListInit(&memBlock->blockList);//初始化存放存储块的链表//从存储区的起始地址,依次划分各个存储块while(memBlockStart < memBlockEnd)//从开始去找到尾部{tNodeInit((tNode *)memBlockStart);//对每一个存储块是要它最开始的存储区作为一个结点,进行初始化tListAddLast(&memBlock->blockList, (tNode *)memBlockStart);//将存储块加到存储块链表中memBlockStart += blockSize;//指针前移}
}/* 存储块获取函数 */
//参数:存储块,用于获取存储块时将存储块存入其中的指针,最大的等待计数
uint32_t tMemBlockWait(tMemBlock *memBlock, uint8_t **mem, uint32_t waitTicks)
{uint32_t status = tTaskEnterCritical();if(tListCount(&memBlock->blockList) > 0)//是否有空闲存储块{*mem = (uint8_t *)tListRemoveFirst(&memBlock->blockList);//从列表头部移出一个存储块tTaskExitCritical(status);return tErrorNoError;//返回没有错误}else{tEventWait(&memBlock->event, currentTask, (void *)0, tEventTypeMemBlock, waitTicks);//任务在事件控制块上等待tTaskExitCritical(status);tTaskSched();//切换到其他任务运行*mem = currentTask->eventMsg;//取出分配到的存储块return currentTask->waitEventResult;//返回等待结果}
}/* 存储块无等待获取函数 */
uint32_t tMemBlockWaitGet(tMemBlock *memBlock, void **mem)
{uint32_t status = tTaskEnterCritical();if(tListCount(&memBlock->blockList) > 0){*mem = (uint8_t *)tListRemoveFirst(&memBlock->blockList);tTaskExitCritical(status);return tErrorNoError;}else{tTaskExitCritical(status);return tErrorResourceUnavailable;//返回资源不可用}
}/* 存储块释放函数 */
void tMemBlockNotify(tMemBlock *memBlock, uint8_t *mem)
{uint32_t status = tTaskEnterCritical();if(tEventWaitCount(&memBlock->event) > 0)//是否有任务在事件控制块上等待{tTask *task = tEventWakeUp(&memBlock->event, (void *)mem, tErrorNoError);//移出一个任务if(task->prio < currentTask->prio)//判断优先级{tTaskSched();}}else{tListAddLast(&memBlock->blockList, (tNode *)mem);//将存储块插入空闲存储块列表}tTaskExitCritical(status);
}

tMemBlock.h

#ifndef __TMEMBOLCK_H
#define __TMEMBOLCK_H#include "tEvent.h"/* 存储块结构 */
typedef struct _tMemBlock
{tEvent event;				//事件控制块void *memStart;			//存储区的起始地址uint32_t blockSize;	//每个存储块的大小uint32_t maxCount;	//最大存储块数量tList blockList;		//存储块列表
}tMemBlock;void tMemBlockInit(tMemBlock *memBlock, uint8_t *memStart, uint32_t blockSize, uint32_t blockCnt);
uint32_t tMemBlockWait(tMemBlock *memBlock, uint8_t **mem, uint32_t waitTicks);
uint32_t tMemBlockWaitGet(tMemBlock *memBlock, void **mem);
void tMemBlockNotify(tMemBlock *memBlock, uint8_t *mem);#endif

app.c

#include "tinyOS.h"
#include "string.h"//定义任务,分别为它们配备独立的堆栈空间
tTask tTask1;
tTask tTask2;
tTask tTask3;
tTask tTask4;
tTaskStack task1Env[1024];
tTaskStack task2Env[1024];
tTaskStack task3Env[1024];
tTaskStack task4Env[1024];typedef uint8_t (*tBlock)[100];
uint8_t mem1[20][100];//20个存储块,每个块是100字节
tMemBlock memBlock1;//定义任务要执行的功能
int task1Flag;
void task1Entry(void *param)
{tBlock block[20];tSetSysTickPeriod(10);//初始化tMemBlockInit(&memBlock1, (uint8_t *)mem1, 100, 20);for(int i = 0; i <20; i++){tMemBlockWait(&memBlock1, (uint8_t **)&block[i], 0);}tTaskDelay(2);for(int i = 0; i <20; i++){memset(block[i], i, 100);tMemBlockNotify(&memBlock1, (uint8_t *)block[i]);tTaskDelay(2);}for(;;)//任务里是for的死循环{task1Flag = 0; tTaskDelay(1);task1Flag = 1;tTaskDelay(1);}
}int task2Flag;
void task2Entry(void *param)
{for(;;){tBlock block;tMemBlockWait(&memBlock1, (uint8_t **)&block, 0);task2Flag = *(uint8_t *)block;}
}
int task3Flag;
void task3Entry(void *param)
{for(;;){task3Flag = 0;tTaskDelay(1);task3Flag = 1;tTaskDelay(1);}
}
int task4Flag;
void task4Entry(void *param)
{for(;;){task4Flag = 0;tTaskDelay(1);task4Flag = 1;tTaskDelay(1);}
}/* 应用任务初始化函数 */
void tInitApp(void)
{//最后一个参数:传堆栈末端地址,因为堆栈是向下生长的,初始堆栈地址是堆栈空间最后一个单元地址的末端tTaskInit(&tTask1, task1Entry, (void *)0x11111111, 0, &task1Env[1024]);tTaskInit(&tTask2, task2Entry, (void *)0x22222222, 1, &task2Env[1024]);tTaskInit(&tTask3, task3Entry, (void *)0x22222222, 1, &task3Env[1024]);tTaskInit(&tTask4, task4Entry, (void *)0x22222222, 1, &task4Env[1024]);
}

调试现象:

相关文章:

存储块的获取与释放

目录 获取存储块 释放存储块 设计实现 获取存储块 有空闲存储块&#xff0c;直接取出空闲块&#xff1b; 无空闲存储块&#xff0c;任务进入等待队列。 释放存储块 无任务等待&#xff0c;插入到空闲链表&#xff1b; 有任务等待&#xff0c;释放等待队列头部的任务。 设计实现…...

定位方式:css

使用相对路径 div ul #div下的所有ul&#xff0c;空格表示相对路径&#xff08;这个实际中用的多一些&#xff09; 绝对路径-一般不用绝对路径 html>head>div&#xff0c;“>”表示根路径 使用class名称定位 使用.表示 使用id定位 使用#表示 使用属性定位 [属性名…...

主从复制架构介绍和主从复制配置案例

每一个数据库的业务都对应着一个前端的业务&#xff0c; 主从复制架构的必要性? 第一点是两个服务器如果有一台服务器出现故障&#xff0c;那么另一台服务器可以正常工作&#xff0c;以保障前端业务可以被正常访问&#xff0c;第二点是两个服务器可以共同去处理数据&#xff…...

零跑汽车一路狂飙

新能源汽车市场潮起潮落&#xff0c;只有潮水退去&#xff0c;才能看清谁在裸泳。十年前&#xff0c;一批新能源汽车新势力带着创新的理念和先进的技术&#xff0c;如雨后春笋般涌入中国汽车市场&#xff0c;掀起一场新旧势力的角逐。 经历市场的激烈洗礼与投资泡沫的挤压&…...

固态硬盘SSD

目录 1、固态硬盘结构 2、访问和读取策略 3、固态硬盘 VS SSD固态硬盘 &#xff08;1&#xff09;速度 &#xff08;2&#xff09;性能 &#xff08;3&#xff09;使用寿命 4、磨损均衡技术 &#xff08;1&#xff09;动态磨损均衡 &#xff08;2&#xff09;静态磨损…...

MTEB文本向量化评估基准:Massive Text Embedding Benchmark

Massive Text Embedding Benchmark 文本向量化评估基准 Bitext mining is the task of finding parallel sentences in two languages. 双语文本挖掘是识别两种语言中语义等价句子对的任务。 Classification is the task of assigning a label to a text. 文本分类是为文本分配…...

【Compose multiplatform教程09】【组件】Image组件

查看全部组件 Image 功能说明&#xff1a;能够加载并显示图片&#xff0c;支持本地资源和网络资源&#xff0c;可对图片的大小、缩放方式、裁剪等属性进行设置&#xff0c;使图片以合适的方式展示在界面中&#xff0c;增强界面的视觉效果。示例场景&#xff1a;在应用的启动页…...

android jetpack compose Model对象更新变量 UI不更新、不刷新问题

以前是搞老本行Android原生开发的&#xff0c;因为工作原因&#xff0c;一直在用vue小程序&#xff1b;因为一些工作需要&#xff0c;又需要用到Android原生开发&#xff0c;建了个项目&#xff0c;打开源码一看&#xff0c;天塌了&#xff01;&#xff01;&#xff01;我以前的…...

Java抽象工厂+单例模式

在前端时间开发过程中,有这样一个业务场景:A;B两家厂商设备进行设备信息的同步功能。 根据实际场景,做了抽象工厂+单例模式实现调用工厂时,生成不同的具体业务引用对象,实现方法的调用。 概念: 抽象工厂模式通过接口或抽象类来创建一系列相关或依赖对象。它定义了一组工…...

React 第十九节 useLayoutEffect 用途使用技巧注意事项详解

1、概述 useLayoutEffect 是useEffect 的一个衍生版本&#xff0c;只是他们的执行时机不同 useLayoutEffect 用于在DOM更新执行完成之后&#xff0c;浏览器渲染绘制之前执行&#xff0c;这会阻塞浏览器的渲染&#xff1b; useEffect 的执行时机是在组件首次渲染和更新渲染之后…...

以太网协议实现——FPGA学习笔记23

一、简介 FPGA千兆网口数据传输MDIO接口——FPGA学习笔记3_yt8531sh原理图-CSDN博客 1、以太网帧类型 2、以太网帧格式 3、以太网MAC帧格式 二、以太网报文 目的IP :ff ff ff ff ff ff(广播IP地址) 类型:ARP (0806) 源MAC地址:74 7d 24 92 fb df 单播 …...

docker 实践与应用举例

docker 实践与应用举例 Docker是一个开源的容器化平台&#xff0c;它允许开发人员将应用程序及其依赖项打包为一个轻量级、可移植的容器&#xff0c;并在不同的环境中运行。Docker的基本概念包括以下几点&#xff1a; 1. 容器&#xff1a;Docker通过使用Linux容器技术&#x…...

双指针——有效三角形的个数

一.题目描述 611. 有效三角形的个数 - 力扣&#xff08;LeetCode&#xff09; 二.题目解析 题目其实很简单就是让我们在数组中找到可能构成三角形的所有可能。构成三角形的前提是&#xff1a;任意两边之和大于第三边。所以我们要满足让下面三条同时成立才可以构成三角形&am…...

【ES6复习笔记】函数参数的默认值(6)

在ES6中&#xff0c;函数参数默认值是一个非常有用的特性&#xff0c;它允许你在定义函数时为参数指定一个默认值。如果在调用函数时没有提供相应的参数值&#xff0c;那么函数将使用默认值。 1. 形参初始值 具有默认值的参数&#xff0c;一般位置要靠后。这是一个潜规则&…...

tryhackme-Cyber Security 101-Linux Shells(linux命令框)

目的&#xff1a;了解脚本和不同类型的 Linux shell。 任务1&#xff1a;Introduction to Linux Shells&#xff08;Linux Shell 简介&#xff09; 作为操作系统的常规用户&#xff0c;我们都广泛使用图形用户界面 &#xff08;GUI&#xff09; 来执行大多数操作。只需点击几…...

【Go】-限流器的四种实现方法

目录 关于限流和限流器 固定窗口限流器 滑动窗口限流器 漏桶限流器 令牌桶限流器 总结 关于限流和限流器 限流&#xff08;Rate Limiting&#xff09;是一种控制资源使用率的机制&#xff0c;通常用于防止系统过载和滥用。 限流器&#xff08;Rate Limiter&#xff09;是…...

精准识别花生豆:基于EfficientNetB0的深度学习检测与分类项目

精准检测花生豆&#xff1a;基于EfficientNet的深度学习分类项目 在现代农业生产中&#xff0c;作物的质量检测和分类是确保产品质量的重要环节。针对花生豆的检测与分类需求&#xff0c;我们开发了一套基于深度学习的解决方案&#xff0c;利用EfficientNetB0模型实现高效、准…...

【信息系统项目管理师】第11章:项目成本管理过程详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 一、规划成本管理1、输入2、工具与技术3、输出二、估算成本1、输入2、工具与技术3、输出三、制定预算1、输入2、工具与技术3、输出四、控制成本1、输入2、工具与技术3、输出一、规划成本管理 定义:规划成本管…...

微信流量主挑战:用户破16!新增文档转换(新纪元3)

朋友们&#xff0c;报告好消息&#xff01;我的小程序用户数量已经涨到16个了&#xff01;没错&#xff0c;真没拉朋友圈亲戚好友来撑场子&#xff0c;全靠实力&#xff08;和一点点运气&#xff09;吸引了16位陌生小伙伴光临&#xff01;这波进步&#xff0c;连我自己都感动了…...

DFS【东北大学oj数据结构11-2】C++

题面 深度优先搜索&#xff08;DFS&#xff09;是一种基于尽可能多地访问相邻顶点策略的图搜索算法。如果顶点 v 有未搜索的顶点则递归搜索直至 v 的最后一条边。在搜索了 v 的所有边之后&#xff0c;搜索继续返回到找到 v 时经过的边。 搜索从原来的起点开始&#xff0c;直到…...

运维项目部署的环境准备

这里用的安装工具是yum,yum作为一个安装工具,用起来比较方便 用yum安装以下软件,组成项目的可运行环境 yum 先更新 yum update -y 安装一个外置仓库 yum install epel-release 安装redis yum install redis 安装nginx yum install nginx 安装vim yum install vim…...

URDF文件中inertial数据的描述坐标系说明

这件事的来源是这样的&#xff1a;结构手动把连杆坐标系下描述的惯性张量数据写入了urdf中&#xff0c;给我到以后发现有问题&#xff0c;给我搞懵了&#xff0c;以为我错了这么多年&#xff0c;于是有了本次的深度调研&#xff0c;先上结论&#xff0c;感兴趣的可以参考后文。…...

OpenCV-Python实战(5)——图形绘制基础

一、直线 cv2.line(img*,pt1*,pt2*,color*,thickness*,lineTypeLINE_8) img&#xff1a;绘图的背景&#xff08;画布&#xff09;。 pt1、pt2&#xff1a;始/终点坐标&#xff0c;格式为元组&#xff08;&#xff09;。 color&#xff1a;直线颜色&#xff0c;BGR格式。 t…...

科技云报到:人工智能时代“三大件”:生成式AI、数据、云服务

科技云报到原创。 就像自行车、手表和缝纫机是工业时代的“三大件”。生成式AI、数据、云服务正在成为智能时代的“新三大件”。加之全球人工智能新基建加速建设&#xff0c;成为了人类社会数字化迁徙的助推剂&#xff0c;让新三大件之间的耦合越来越紧密。从物理世界到数字世…...

HarmonyOS NEXT 实战之元服务:静态案例效果(二)

背景&#xff1a; 前几篇学习了元服务&#xff0c;后面几期就让我们开发简单的元服务吧&#xff0c;里面丰富的内容大家自己加&#xff0c;本期案例 仅供参考 先上本期效果图 &#xff0c;里面图片自行替换 效果图代码案例如下&#xff1a; Index里面实现 import { authent…...

Qt学习记录

Qt学习记录 Qt6读取GBK文件 在Qt5中&#xff0c;有QTextCodec模块&#xff0c;支持各种编码设置。 // Qt5 QCoreApplication a(argc, argv); auto desk QStandardPaths::writableLocation(QStandardPaths::DesktopLocation); QFile file(QDir(desk).filePath("test.tx…...

用于汽车碰撞仿真的 Ansys LS-DYNA

使用 Ansys LS-DYNA 进行汽车碰撞仿真汽车碰撞仿真 简介 汽车碰撞仿真是汽车设计和安全工程的一个关键方面。这些仿真使工程师能够预测车辆在碰撞过程中的行为&#xff0c;从而有助于改进安全功能、增强车辆结构并符合监管标准。Ansys LS-DYNA 是一款广泛用于此类仿真的强大工具…...

Android--java实现手机亮度控制

文章目录 1、开发需求2、运行环境3、主要文件4、布局文件信息5、手机界面控制代码6、debug 1、开发需求 需求&#xff1a;开发一个Android apk实现手机亮度控制 2、运行环境 Android studio最新版本 3、主要文件 app\src\main\AndroidManifest.xml app\src\main\res\layou…...

300多种复古手工裁剪拼贴艺术时尚字母、数字、符号海报封面Vlog视频MOV+PNG素材

300复古时尚大小写字母、数字、符号拼贴海报封面平面设计Vlog视频标题动画 Overlay - Cut-Out Letters Animations Pack - Animated Letters, Numbers, and Symbols 使用 Cut-Out Letters Animations Pack 提升您的内容&#xff01;包含 300多个高品质动画资源&#xff0c;包括…...

免押租赁系统的优势与应用解析

内容概要 免押租赁系统&#xff0c;听上去是不是很未来&#xff1f;其实&#xff0c;它的基本概念就是在租赁过程中&#xff0c;消费者无需交付押金&#xff0c;直接使用所租物品。这样一来&#xff0c;不仅降低了租赁的门槛&#xff0c;也让许多想尝试的用户能够更轻松地参与…...

feign 针对某一个特定接口设置超时时间

一、对feign所有接口设置超时配置 如果是当前feign所有接口的超时配置&#xff0c;需要在 FeignClient 的 configuration 属性中设置。 详情见&#xff1a; https://blog.csdn.net/sinat_32502451/article/details/136884349 二、针对某一个特定接口设置超时时间 调用 feig…...

Chrome被360导航篡改了怎么改回来?

一、Chrome被360导航篡改了怎么改回来&#xff1f; 查看是否被360主页锁定&#xff0c;地址栏输入chrome://version&#xff0c;看命令行end后面&#xff08;蓝色部分&#xff09;&#xff0c;是否有https://hao.360.com/?srclm&lsn31c42a959f 修改步骤 第一步&#xff1a…...

GitLab 将停止为中国区用户提供服务,60天迁移期如何应对? | LeetTalk Daily

“LeetTalk Daily”&#xff0c;每日科技前沿&#xff0c;由LeetTools AI精心筛选&#xff0c;为您带来最新鲜、最具洞察力的科技新闻。 GitLab作为一个广受欢迎的开源代码托管平台&#xff0c;近期宣布将停止服务中国大陆、澳门和香港地区的用户提供服务。根据官方通知&#x…...

Linux系统和makefile详解

### Linux系统详解 Linux是一个开源且功能强大的操作系统内核&#xff0c;自1991年由林纳斯托瓦兹首次发布以来&#xff0c;它已经成为全球最流行的操作系统之一。Linux的核心特性包括开源、多用户多任务、高稳定性与安全性&#xff0c;以及良好的跨平台能力。 1. **开源**&a…...

基于导频方法的MIMO信道估计详解

多输入多输出&#xff08;MIMO&#xff09;技术作为现代无线通信系统的核心&#xff0c;通过利用多天线阵列在发射端和接收端同时传输和接收多个数据流&#xff0c;显著提高了系统的频谱效率和数据传输速率。然而&#xff0c;MIMO系统的性能在很大程度上依赖于对信道状态的准确…...

#!/bin/bash^M 坏的解释器:没有哪个文件或者目录

#!/bin/bash^M 坏的解释器&#xff1a;没有哪个文件或者目录 问题背景问题分析问题解决dos2unixsedvim编辑器&#xff08;推荐&#xff09;在Windows上转换文件格式 最后 问题背景 工作中&#xff0c;在Windows上编写的shell脚本上传到Linux服务器&#xff0c;在执行的时候提示…...

aj-report本地前后端分离部署运行

github项目地址 aj-report-mine 在源代码v1.4版本基础上&#xff0c;本地进行前后端分离部署开发 这里我是进行了整合&#xff0c;把自己在拉取源代码到成功运行过程中的一些东西直接整合&#xff0c;根据下面的步骤即可成功运行 资源获取 夸克网盘(16-github-aj-report-re…...

1435A 信号发生器

1435A 信号发生器 1435系列信号发生器基于创新的技术实现了性能、经济性和体积重量的平衡设计。具有优良的频谱纯度&#xff0c;单边带相位噪声1GHz载波10kHz频偏达到-136dBc/Hz&#xff0c;10GHz载波10kHz频偏达到-116dBc/Hz&#xff1b;具有高功率输出和大动态范围&#xff…...

计算机组成原理的学习笔记(9)-- CPU·其一 CPU的基本概念/流水线技术/数据通路

学习笔记 前言 ​ 本文主要是对于b站尚硅谷的计算机组成原理的学习笔记&#xff0c;仅用于学习交流。 CPU&#xff08;中央处理器&#xff09; 1. 组成 定义&#xff1a;计算机的核心部件&#xff0c;负责执行指令和处理数据。 组成部分&#xff1a; 核心&#xff1a;多个处…...

【Python】 -- python3 读取 aws athena 表数据

目录 1、环境准备 2、安装环境 3、举例查询某张表数据和执行 add partition 操作 3.1、编辑文件 athena_jdbc.py 3.2、查找 JVM 的动态链接库路径 3.3、保存文件&#xff0c;执行以下命令 1、环境准备 oracle jdk 11centos 8依赖&#xff1a;pandas、pyathenajdbc 和 sq…...

子网掩码计算route命令

子网掩码 - 站长工具 1.子网掩码 子网掩码就是用来遮掩IP地址并划分网段的工具&#xff0c;根据遮掩的位数不同来划分不同的网段。 2.网关 网关(Gateway)又称网间连接器、协议转换器。默认网关在网络层上以实现网络互连&#xff0c;是最复杂的网络互连设备&#xff0c;仅用…...

店铺营业状态设置

admineShopController RestController("admineShopController") RequestMapping("/admin/shop") Api(tags "店铺相关接口") Slf4j public class ShopController {//设置一个常量 因为经常使用public static final String KEY "SHOP-ST…...

JavaWeb 开发基础入门

在当今互联网时代&#xff0c;JavaWeb 开发是构建各类网络应用的核心技术之一。无论是大型企业级应用&#xff0c;还是小型的个人网站&#xff0c;JavaWeb 都展现出强大的生命力。今天&#xff0c;就让我们一起踏入 JavaWeb 开发的基础入门之旅。 一、认识 JavaWeb JavaWeb 是…...

Unity Dots理论学习-2.ECS有关的模块(1)

Unity的实体组件系统&#xff08;ECS&#xff09;是支撑DOTS模块和技术的面向数据架构。ECS为Unity中的内存数据和runtime进程调度提供了高度的控制和确定性。 ECS for Unity 2022 LTS 配备了两个兼容的物理引擎&#xff0c;一个高级的Netcode package&#xff0c;以及一个用来…...

CentOS下安装RabbitMQ

提示:“奔跑吧邓邓子” 的高效运维专栏聚焦于各类运维场景中的实际操作与问题解决。内容涵盖服务器硬件(如 IBM System 3650 M5)、云服务平台(如腾讯云、华为云)、服务器软件(如 Nginx、Apache、GitLab、Redis、Elasticsearch、Kubernetes、Docker 等)、开发工具(如 Gi…...

【JAVA高级篇教学】第四篇:MySQL 5.7 与 MySQL 8 的区别

MySQL 是最流行的开源数据库管理系统之一&#xff0c;而 MySQL 8 的发布相较于 MySQL 5.7 带来了大量的改进与功能增强。 目录 一、性能改进 二、功能增强 三、安全性 四、开发体验 五、默认排序规则 六、支持的排序规则数量 七、区分敏感性&#xff08;Sensitivity&…...

【Git】-- 版本说明

Alpha&#xff1a;是内部测试版,一般不向外部发布,会有很多 Bug .一般只有测试人员使用。Beta&#xff1a;也是测试版&#xff0c;这个阶段的版本会一直加入新的功能。在 Alpha 版之后推出。RC&#xff1a;(Release Candidate) 顾名思义么 ! 用在软件上就是候选版本。系统平台…...

Flink优化----FlinkSQL 调优

目录 FlinkSQL 调优 1 设置空闲状态保留时间 2 开启 MiniBatch 3 开启 LocalGlobal 3.1 原理概述 3.2 提交案例&#xff1a;统计每天每个 mid 出现次数 3.3 提交案例&#xff1a;开启 miniBatch 和 LocalGlobal 4 开启 Split Distinct 4.1 原理概述 4.2 提交案例&…...

云上「算力浪费」,正在掣肘企业应用落地。

投入算力&#xff0c;真的能换来利润吗&#xff1f;这是每个想“入局”大模型的企业都会思考的问题。 人工智能行业一直困于成本&#xff0c;无论从模型训练到推理&#xff0c;都充满了“烧钱”的气息。无法避免的高昂算力&#xff0c;成为企业入局大模型的“铁门槛”。 据多…...

科技创新 数智未来|清科·沙丘投研院走进竹云

12月20日&#xff0c;清科沙丘投研院带领企投家团队走进竹云交流分享&#xff0c;聚焦技术创新、企业数字化管理、行业前沿应用案例等热点议题&#xff0c;深入探讨数字技术如何点燃企业高质量发展的澎湃动力&#xff0c;共话企业数字化、智能化发展之道。 达晨财智股权管理部…...