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

2-2-18-17 QNX系统架构之“实时”

阅读前言

本文以QNX系统官方的文档英文原版资料为参考,翻译和逐句校对后,对QNX操作系统的相关概念进行了深度整理,旨在帮助想要了解QNX的读者及开发者可以快速阅读,而不必查看晦涩难懂的英文原文,这些文章将会作为一个或多个系列进行发布,从遵从原文的翻译,到针对某些重要概念的穿插引入,以及再到各个重要专题的梳理,大致分为这三个层次部分,分不同的文章进行发布,依据这样的原则进行组织,读者可以更好的查找和理解。


1. 什么是实时,为什么我需要它?

实时性是操作系统中一个常常被误解且误用的特性。本附录概述了实时计算的一些关键要素,并讨论了一些设计考量因素及优势。

我们可以从 comp.realtime 新闻组常见问题解答(FAQ)中对实时系统的基本定义开始说起:

实时系统是这样一种系统,其计算的正确性不仅取决于计算的逻辑正确性,还取决于产生结果的时间。如果系统的时间约束未得到满足,就可以说发生了系统故障。

那么,实时性就是系统中时间确实 “至关重要” 的一种特性。在实时系统中,计算的价值取决于答案的及时性。例如,延迟完成的计算其价值会降低,甚至毫无价值,而提前完成的计算也不会有额外价值。实时性始终是一个程度问题,因为即使是批处理计算系统也具有实时性方面的考量 —— 毕竟没人希望自己的工资到账延迟两周!

当系统中存在资源竞争,且资源由众多活动共享时,问题就会出现,而这正是我们将实时性特性应用于操作系统的背景。在实现任何实时系统时,该过程中的一个关键步骤是确定活动的调度计划,以确保所有活动都能按时完成。

任何实时系统都包含不同类型的活动:

  • 可调度的活动;
  • 不可调度的活动,例如操作系统设施和中断处理程序;
  • 非实时活动。

如果不可调度的活动能够优先于可调度的活动执行,它们将会影响系统处理时间约束的能力。

硬实时和软实时

硬实时是系统中计算及时性的一种特性。系统中的硬实时约束意味着,如果计算延迟完成,那么该计算就毫无价值,而且计算延迟可能会对系统造成灾难性的后果。简而言之,硬实时系统就是所有活动都必须按时完成的系统。

软实时是计算及时性的一种特性,在此情况下,计算的价值会随着其延迟程度而降低。软实时系统能够容忍软实时计算的一些延迟结果,只要其价值尚未降至零。软实时系统通常带有一些衍生要求,例如关于可接受的计算延迟频率的随机模型。需要注意的是,这与该术语的常规用法大不相同,常规用法并不考虑计算完成得多晚或者这种情况发生的频率。

软实时常常被不恰当地应用于那些不满足确保计算能够按时完成的必要条件的操作系统。这类操作系统最好被描述为准实时或伪实时操作系统,因为它们在必要时会优先执行实时活动,但却没有充分考虑系统中的不可调度活动。

谁需要实时性?

传统上,实时操作系统一直用于需要硬实时能力的 “关键任务” 环境中,在这种环境下,如果不能及时执行活动,可能会对人员或财产造成损害。

然而,常常被忽视的情况是,在需要满足服务质量保证的场景中也需要实时性,特别是当无法满足要求时可能会导致经济处罚。这涵盖了一些明显的服务场景,例如 “三十分钟内送达,否则免费”,但也包括一些无形的损失,比如失去机会或市场份额下降。

越来越多的消费类设备也开始采用实时性技术,这些复杂的系统对可靠性有着极高的要求。例如,一个旨在播放实时视频(如 MPEG 影片)的非实时设备,如果其内容传输的任何部分依赖于软件,那么它可能会出现丢帧现象,且丢帧速率可能会让用户觉得无法接受。

在设计系统时,开发人员需要评估性能优势是否值得使用实时技术。早期做出的决策可能会产生意想不到的后果,例如当已部署系统过载时,可能会出现病态行为,导致大多数活动甚至所有活动都无法按时完成(如果能完成的话)。

实时技术可以通过改善对某些事件的感知响应,或者确保重要活动相对于系统中的其他活动优先执行等方式,应用于常规系统,从而对用户体验产生积极影响。

什么是实时操作系统(RTOS)?

我们对构成硬实时操作系统的定义基于与行业实践相符的实时调度理论:

硬实时操作系统必须保证,在不考虑外部因素的情况下,如果具备足够的计算能力,就能执行可行的调度计划。在此语境下,外部因素指的是可能产生中断的设备,包括会因网络流量而产生中断的网络接口。

换句话说,如果系统设计者能够控制系统环境,那么操作系统本身不会成为任何计算延迟的原因。我们可以将这个术语应用于常规操作系统(这类操作系统通常根据任务优先级来执行任务),通过参考调度理论并推导出必须满足的一组最低条件来实现。不深入细节的话,调度理论表明,可以通过将可用时间划分为周期性的时段,并假设每个时段的一定比例预留给特定的实时活动,从而将调度计划转换为静态优先级分配,以此保证及时性。

为了做到这一点,必须满足以下基本要求:

  • 高优先级任务总是优先于低优先级任务执行。
  • 优先级反转(当高优先级任务需要低优先级任务所分配的资源时可能会出现这种情况)是有界的。
  • 不可调度的活动,包括非实时活动和操作系统活动,在任何特定时段内都不会超出剩余容量。

由于条件 3 的存在,我们必须排除那些不受操作系统控制的活动,这就引出了上述关于外部因素的规定。

然后我们可以推导出以下操作系统要求(OSRs):

  • 操作系统必须支持对任务(适用于线程和进程)进行固定优先级抢占式调度。
  • 操作系统必须为同步原语提供优先级继承或优先级天花板模拟机制。
  • 操作系统内核必须是可抢占的。
  • 中断必须有固定的延迟上限。进一步来说,需要支持嵌套中断。
  • 操作系统服务必须按照服务客户端所确定的优先级来执行:
    • 它所依赖的所有服务都必须继承该优先级。
    • 必须对服务所使用的所有共享资源应用优先级反转避免机制。

OSR 3 和 OSR 4 对任何特定实时活动开始时所产生的延迟施加了固定的上限。OSR 5 确保操作系统服务本身(作为内部因素)不会向系统中引入可能违反基本要求 3 的不可调度活动。

实时操作系统(RTOS)与常规操作系统有何不同?

将实时操作系统(RTOS)与常规操作系统区分开来的关键特性是上述所有要求中所固有的可预测性。常规操作系统(如 Linux)在将线程和进程调度到 CPU 时试图采用 “公平性” 策略。这使得系统中的所有应用程序都有机会取得进展,但并没有确立实时线程在系统中的优势地位,也没有像保证它们按时完成任务所要求的那样保留其相对优先级。同样,当代表客户端线程执行通常在内核调用中执行的系统服务时,通常所有优先级信息都会丢失。这会导致不可预测的延迟,从而使活动无法按时完成。

相比之下,QNX Neutrino 实时操作系统(RTOS)中使用的微内核架构旨在直接应对所有这些要求。

微内核本身只是管理系统内的线程,并允许它们相互通信。调度始终在线程级别进行,并且线程总是根据其固定优先级进行调度 —— 或者,在出现优先级反转的情况下,由微内核根据优先级反转情况进行调整后的优先级来调度。准备运行的高优先级线程可以抢占低优先级线程。

在这个框架内,除了基本的调度和进程间通信(IPC)之外,所有设备驱动程序和操作系统服务都作为系统中的独立进程存在。所有服务都通过同步消息传递 IPC 机制进行访问,该机制允许接收方继承客户端的优先级。这种优先级继承方案通过将原始实时活动的优先级传递到所有服务请求以及后续的设备驱动程序请求中,从而满足了 OSR 5 的要求。

同时也具备相应的灵活性。由于 OSR 1 和 OSR 5 强调设备驱动程序请求需要按照客户端的优先级顺序进行操作,正常操作的吞吐量可能会大幅降低。利用这种模式,可以将一个操作系统服务或设备驱动程序替换为满足这些要求的实时版本。复杂系统通常会将此类资源划分为实时和非实时两部分,针对每种资源采用不同的服务和设备驱动程序实现方式。

正因如此,系统中的所有活动都是按照代表其执行的线程所确定的优先级来执行的。

什么是软实时操作系统?

软实时操作系统必须能够有效地完成硬实时操作系统所必须做的一切。此外,软实时操作系统还必须具备对系统中任务进行精确成本核算的监控能力。它必须确定活动何时未能按时完成或者何时超出了其分配的 CPU 容量,并触发相应的响应。

这一切对我的应用程序有什么影响?

如果您正在编写一个要部署在实时操作系统上的应用程序或系统,考虑实时操作系统的特性对应用程序执行的影响,并了解如何利用这些特性使其对您有利是很重要的。例如,借助实时操作系统,您可以提高用户发起的某些操作的响应速度。

大多数应用程序通常在系统内以默认的用户优先级运行。这意味着应用程序通常以循环轮转的方式执行,彼此竞争一定比例的 CPU 容量。如果没有上述提到的那种实时调度机制,您可以调整系统中进程的优先级,使某些活动相对于系统中的其他活动优先执行。调整优先级是一把双刃剑。谨慎使用的话,它可以极大地提高对用户来说重要的方面的响应速度。同时,也有可能导致系统中的其他进程缺乏资源,而这种情况在常规桌面系统中通常是不会发生的。

确保高优先级进程和线程不会使系统中的其他进程缺乏资源的关键在于确定对它们执行所施加的限制。通过控制执行节奏,或者根据负载进行限制,您可以限制这些活动所消耗的 CPU 比例,以便用户进程能够获得它们应得的 CPU 份额。

媒体播放器(如音频播放器(MP3、.wav 等)和视频播放器(MPEG - 2))就是能够从优先级调整中获益的应用程序的好例子。媒体播放器的操作可以与正确播放所需的媒体速率相挂钩(例如,44kHz 音频、30fps 视频)。因此,在这个限制条件下,用于缓冲数据的读取线程和用于渲染或播放的线程都可以设计为根据可编程定时器唤醒,缓冲或渲染一帧数据,然后进入睡眠状态等待下一个定时器触发。这样就提供了必要的节奏控制,使得可以将优先级分配得高于正常用户活动,但低于更关键的系统功能。

通过选择合适的优先级,您可以确保播放能够始终以给定的媒体速率稳定进行。一个编写良好的媒体播放器还会考虑服务质量,这样如果它没有获得足够的 CPU 时间,它可以通过有选择地丢弃样本或遵循适当的回退策略来降低自身需求。这样也就防止了它使其他进程缺乏资源。

您可能还希望在系统中优先处理某些用户事件。当您增加应用程序内的并发程度,并且事件总能在可预测的短时间内得到处理时,这种做法效果很好。这里的关键问题在于这些事件产生的频率。如果它们不会过于频繁地发生,那么提高响应这些事件的线程的优先级就是安全的。如果它们可能过于频繁地发生,那么在过载情况下其他活动就会缺乏资源。

最简单的解决方案是将事件处理责任划分到具有不同优先级的不同处理线程中,并对请求进行排队或通过消息传递来交付请求。您可以将处理程序的执行与定时器绑定,这样线程的执行就会受到定时器的限制,在给定的时间间隔内处理固定数量的请求。这凸显了划分应用程序责任区域的重要性,它提供了一种灵活的设计,为有效利用并发和优先响应创造了机会,所有这些都有助于提升响应的直观感受。

2. 理解总结

这段内容围绕实时操作系统(RTOS)这一核心主题,从多个方面进行了深入且全面的阐述,包括实时性的概念、不同类型实时系统(硬实时、软实时)的特点、谁需要实时性、实时操作系统的定义及要求、与常规操作系统的区别,以及实时操作系统对应用程序的影响等,旨在帮助读者清晰理解实时操作系统相关的诸多关键知识点以及如何在实际应用中合理运用。

实时性概念及相关活动类型

首先介绍了实时性在操作系统领域常被误解和误用的现状,引出实时系统的基本定义,强调时间对计算结果正确性的重要性,说明了实时性是个程度问题且在各类系统中都有体现。接着阐述实时系统包含的不同活动类型,指出不可调度活动若优先执行会影响系统处理时间约束的能力,为后续进一步探讨不同实时特性的系统做铺垫。

硬实时和软实时系统特点

详细区分了硬实时和软实时的概念,硬实时要求所有活动必须按时完成,计算延迟后果严重;软实时则允许一定程度的计算延迟,只要价值未降为零,且还提及软实时概念常被误用的情况,帮助读者准确把握这两种不同实时特性系统的本质区别。

实时性的应用场景及需求

从多个角度探讨了谁需要实时性,既包括传统关键任务环境,也涵盖需满足服务质量保证的场景以及消费类设备等,强调在设计系统时要权衡使用实时技术的利弊,因为不当使用可能在系统过载时出现问题,但合理应用能提升用户体验,展示了实时性在不同领域的重要性和应用的复杂性。

实时操作系统的定义及要求

基于实时调度理论给出硬实时操作系统的定义,明确其必须满足的一系列基本要求以及推导出的操作系统要求(OSRs),这些要求从调度方式、优先级处理、内核特性到中断管理以及操作系统服务执行等多方面进行了规范,旨在保证系统的可预测性和实时性,是理解硬实时操作系统的核心内容。

实时操作系统与常规操作系统的区别

对比分析了 RTOS 和常规操作系统(如 Linux)的关键差异,指出常规操作系统采用 “公平性” 调度策略导致无法保证实时线程按时完成任务,而 QNX Neutrino RTOS 的微内核架构通过特定的线程调度、优先级管理以及服务访问机制等,能直接应对实时性相关要求,并且具备灵活性,可根据需求调整资源分配方式,凸显了 RTOS 在实时性保障方面的独特优势。

软实时操作系统的额外要求

说明软实时操作系统除具备硬实时操作系统的功能外,还需具备对任务的监控和成本核算能力,能对活动未按时或超出资源分配情况做出响应,进一步完善了对不同类型实时操作系统特性的介绍。

实时操作系统对应用程序的影响

最后着重讲述了实时操作系统特性如何影响应用程序,以媒体播放器为例说明了通过合理调整优先级、控制执行节奏、考虑服务质量以及划分事件处理责任等方式,既能提高应用程序中关键操作的响应速度,又能避免高优先级任务过度占用资源影响其他进程,体现了在实际应用中利用实时操作系统特性的技巧和重要性,为开发者在编写基于实时操作系统的应用程序时提供了实用的指导思路。

总体而言,这段内容构建起了一个较为完整的关于实时操作系统的知识体系,从理论概念到实际应用,全方位地帮助读者深入理解实时操作系统及其相关的诸多重要方面。

相关文章:

2-2-18-17 QNX系统架构之“实时”

阅读前言 本文以QNX系统官方的文档英文原版资料为参考,翻译和逐句校对后,对QNX操作系统的相关概念进行了深度整理,旨在帮助想要了解QNX的读者及开发者可以快速阅读,而不必查看晦涩难懂的英文原文,这些文章将会作为一个…...

Linux下部署MySQL8.0集群 - 主从复制(一主两从)

目录 一、部署前准备 1、查看系统信息 # 查看系统版本 cat /etc/red* # 查看系统位数 getconf LONG_BIT[rootlocalhost ~]# cat /etc/red* CentOS Linux release 7.5.1804 (Core) [rootlocalhost ~]# getconf LONG_BIT 642、下载对应安装包 进入MySQL官网:https:…...

将HTML转换为PDF:使用Spire.Doc的详细指南

目录 引言 1. 为什么选择 Spire.Doc? 1.1 主要特点 1.2 适用场景 2. 准备工作 2.1 引入 Spire.Doc 依赖 2.2 禁用 SSL 证书验证 3. 实现功能 3.1 主类结构 3.2 代码解析 4. 处理图像 5. 性能优化 5.1 异步下载图像 示例代码 5.2 批量处理优化 示例代…...

HarmonyOS 实践 - 设计模式在代码中的作用

文章目录 前言设计模式概述单例模式:全局状态管理代码分析 策略模式:界面主题切换代码分析 示例测试单例模式测试策略模式测试 体验评价总结 前言 在软件开发中,设计模式是公认的最佳实践,它能帮助开发者通过模块化和规范化的代码…...

kubeadm一键部署K8S 集群架构

kubeadm一键部署K8S 集群架构(centos7) https://www.k8src.cn/ https://kubernetes.io/zh-cn/docs/home/ https://blog.csdn.net/m0_58709145/article/details/140128179 https://blog.csdn.net/jiaqijiaqi666/article/details/129745828 Kubeadm init报错[ERROR CRI]: contai…...

[NSSCTF 2022 Spring Recruit]factor

给了: 说n是p*q 先求一下p*q factordb.com 然后再让pq 得到:31207540994438423298 接着用md5加密得到falg NSSCTF{7957a92ef959998115a6bda6d992656e}...

go 中使用redis 基础用法

1、安装redis 参考链接:https://www.codeleading.com/article/98554130215/ 1.1 查看是否有redis yum 源 yum install redis没有可用的软件包,执行1.2 1.2下载fedora的epel仓库 yum install epel-release --下载fedora的epel仓库1.3启动redis s…...

git branch -r(--remotes )显示你本地仓库知道的所有 远程分支 的列表

好的,git branch -r 这个命令用于列出远程分支。让我详细解释一下: 命令: git branch -rdgqdgqdeMac-mini ProductAuthentication % git branch -rorigin/main作用: 这个命令会显示你本地仓库知道的所有 远程分支 的列表。它不…...

回归预测 | MATLAB实现CNN-BiGRU卷积神经网络结合双向门控循环单元多输入单输出回归预测

回归预测 | MATLAB实现CNN-BiGRU卷积神经网络结合双向门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现CNN-BiGRU卷积神经网络结合双向门控循环单元多输入单输出回归预测预测效果基本介绍程序设计参考资料预测效果 基本介绍 CNN-BiGRU,即卷积神经网络(CNN)与双…...

【人工智能数学基础】——深入详解贝叶斯理论:掌握贝叶斯定理及其在分类和预测中的应用

深入详解贝叶斯理论:掌握贝叶斯定理及其在分类和预测中的应用 贝叶斯理论(Bayesian Theory)是概率论和统计学中的一个重要分支,它以托马斯贝叶斯(Thomas Bayes)命名,主要关注如何根据新的证据更…...

Gin-vue-admin(1):环境配置和安装

目录 环境配置如果443网络连接问题,需要添加代理服务器 后端运行前端运行 环境配置 git clone https://gitcode.com/gh_mirrors/gi/gin-vue-admin.git到server文件目录下 go mod tidygo mod tidy 是 Go 语言模块系统中的一个命令,用于维护 go.mod 文件…...

深入解析与防范:基于缓冲区溢出的FTP服务器攻击及调用计算器示例

深入解析与防范:基于缓冲区溢出的FTP服务器攻击及调用计算器示例 摘要 本文将详细探讨一种利用缓冲区溢出漏洞对FTP服务器进行远程攻击的技术,并通过分析给定代码示例,揭示其工作原理和潜在风险。我们将重点讨论如何在靶机上实现调用计算器…...

Gargoyle路由安装dockerd

ea8500刷石像鬼路由1.14.0,安dockerd,需先下载并安装以下依赖包,逐个安装。 kernel_5.10.176-1-6b05bc664d80d655942a20fb9ef8c3cd_arm_cortex-a15_neon-vfpv4.ipk kmod-br-netfilter_5.10.176-1_arm_cortex-a15_neon-vfpv4.ipk kmod-crypto…...

在linux系统的docker中安装GitLab

一、安装GitLab: 在安装了docker之后就是下载安装GitLab了,在linux系统中输入命令:docker search gitlab就可以看到很多项目,一般安装第一个,它是英文版的,如果英文不好可以安装twang2218/gitlab-ce-zh。 …...

滑动窗口

滑动窗口 标志: 利用两个指针 只进不退的特性 (样子与窗口类似) 解题模板 更新结果的时机 应该具体题目具体分析。 例题: 438. 找到字符串中所有字母异位词 - 力扣(LeetCode) 1658. 将 x 减到 0 的最小操作数 - 力…...

人工智能 AI 大模型研究设计与实践应用技术研究报告

人工智能 AI 大模型研究设计与实践应用技术研究报告 摘要: 本报告深入探讨了人工智能 AI 大模型的研究设计架构以及在各领域的实践应用技术。通过对模型架构、训练方法、优化策略的详细阐述,结合实际案例分析其在自然语言处理、计算机视觉、智能医疗等领…...

【深度学习】 零基础介绍卷积神经网络(CNN)

CNN学习 零基础介绍写个CNN最简单的代码一. 概述二. 搭建CNN1. 输入层2. 卷积层3. 激活层4. 池化层5. 全连接层6. 网络搭建小结7. 损失函数8. 梯度下降9. 反向传播10. 模型评估与正则化11. 尝试搭建自己的第一个CNN 三. 经典CNN结构四. 猫狗识别项目实践1. Paddle实现版本&…...

答题考试系统v1.6.1高级版源码分享+uniapp+搭建测试环境

一.系统介绍 一款基于FastAdminThinkPHPUniapp开发的小程序答题考试系统,支持多种试题类型、多种试题难度、练题、考试、补考模式,提供全部前后台无加密源代码,支持私有化部署 二.测试环境 系统环境:CentOS、 运行环境&#x…...

PowerMILL 客制化宏 - 变量

从PowerMILL2012起,命令起始支持变量。支持变量将使宏命令更加灵活和功能强大。可以对变量做一些运算而不依赖其它语言。 当前支持有变量类型为: INT; REAL; STRING; ENTITY; ARRAY LIST; OBJECT; 以下就…...

第五篇:前后端如何“扯皮”——HTTP 在开发中的应用

文章目录 第五篇:前后端如何“扯皮”——HTTP 在开发中的应用1. HTTP 在前后端分离中的作用1.1 前后端分离的崛起1.2 HTTP 的职责 2. RESTful API 与 GraphQL 的对比2.1 RESTful API:标准化的老兵2.2 GraphQL:灵活的新秀2.3 RESTful 和 Graph…...

如何在 Ubuntu 22.04 服务器上安装 Jenkins

简介 Jenkins 是一个非常流行的免费自动化工具,每个人都应该了解它。DevOps 工程师使用它来自动化代码构建、测试和部署。本文将重点介绍如何在新的 Ubuntu LTS 版本,即 Ubuntu 22.04 中安装 Jenkins。 但在此之前,让我们快速讨论一下 Jenk…...

关于代码注释

代码注释的重要性与最佳实践 在软件开发过程中,代码注释被认为是代码质量的一个重要组成部分。它不仅帮助开发人员理解和维护代码,还有助于团队协作和代码的可持续性。然而,如何有效地使用注释是一个值得深思的问题。本文将探讨代码注释的重…...

Mitt 库使用笔记

1. 介绍 Mitt 是一个轻量级的 JavaScript 库,用于在应用程序中实现事件触发和监听。它不依赖任何外部库,功能简洁,主要用于在模块间进行事件传递。 体积小:Mitt 的压缩版本仅有几千字节,非常适合在前端框架中作为事件…...

OpenCVE:一款自动收集NVD、MITRE等多源知名漏洞库的开源工具,累计收录CVE 27万+

漏洞库在企业中扮演着至关重要的角色,不仅提升了企业的安全防护能力,还支持了安全决策、合规性要求的满足以及智能化管理的发展。前期博文《业界十大知名权威安全漏洞库介绍》介绍了主流漏洞库,今天给大家介绍一款集成了多款漏洞库的开源漏洞…...

uniapp中的uni-file-picker组件上传多张图片到服务器

由于在uniapp官方文档中的uni-file-picker组件可实现图片上传功能&#xff0c;默认的是上传到自带的服务&#xff0c;所以我们要修改成自己的服务器 1. 添加 :auto-upload"false" 加上这个取消自动上传 <uni-file-picker v-model"jobAddUpdateForm.imag…...

LIF神经元模型的显隐转换

本文星主将介绍LIF神经元模型的显式和隐式转换&#xff08;星主看见有论文[1]是这个称呼的&#xff0c;所以本文也称显式和隐式&#xff09;&#xff0c;并得到隐式模型的解析解。注意&#xff1a;理解本文内容需要有一定的微积分基础&#xff0c;如果大家看着数学头疼&#xf…...

Node的学习以及学习通过Node书写接口并简单操作数据库

Node的学习 Node的基础上述是关于Node的一些基础&#xff0c;总结的还行&#xff1b; 利用Node书写接口并操作数据库 1. 初始化项目 创建新的项目文件夹&#xff0c;并初始化 package.json mkdir my-backend cd my-backend npm init -y2. 安装必要的依赖 安装Express.js&…...

Android 获取屏幕物理尺寸

注&#xff1a;编译 sdk 需要使用 30 因为引入了 WindowMetrics、uild.VERSION_CODES.R 新 sdk 才存在的类和属性 某些场景处理 view &#xff0c;对 view 显示的位置要求比较精确&#xff0c;通常我们使用context.getResources().getDisplayMetrics().widthPixels 获取到的宽、…...

【FFmpeg】解封装 ① ( 封装与解封装流程 | 解封装函数简介 | 查找码流标号和码流参数信息 | 使用 MediaInfo 分析视频文件 )

文章目录 一、解封装1、封装与解封装流程2、解封装 常用函数 二、解封装函数简介1、avformat_alloc_context 函数2、avformat_free_context 函数3、avformat_open_input 函数4、avformat_close_input 函数5、avformat_find_stream_info 函数6、av_read_frame 函数7、avformat_s…...

#渗透测试#红队全栈 powshell基础使用

声明&#xff01; 学习视频来自B站up主 泷羽sec&#xff0c;任何违法事件与本人以及泷羽sec团队无关&#xff0c;切勿触碰法律底线&#xff0c;否则后果自负&#xff01;&#xff01;&#xff01;&#xff01; 目录标题 认识powsehll打开方式 使用方式美化自己的powershell简单…...

Qt之自定义标题栏拓展(十)

Qt开发 系列文章 - user-defined-titlebars&#xff08;十&#xff09; 目录 前言 一、方式一 1.效果演示 2.创建标题栏类 3.可视化UI设计 4.定义相关函数 5.使用标题栏类 二、方式二 1.效果演示 2.创建标题栏类 3.定义相关函数 1.初始化函数 2.功能函数 3.窗口关…...

设计模式之创建型

1、What 关注对象的创建过程&#xff0c;旨在通过不同的方式来创建对象&#xff0c;以解耦对象的创建与其使用过程。这些模式提供了创建对象的灵活性和可扩展性&#xff0c;使得代码更加易于维护和管理。 1.1 单例模式 确保一个类只有一个实例&#xff0c;并提供一个全局访问…...

记录一下自己对网络安全法的笔记

仅记录一下自己对网络安全法的笔记 文章来源&#xff08;https://www.cac.gov.cn/2016-11/07/c_1119867116_2.htm&#xff09;&#xff08;2016年11月7日第十二届全国人民代表大会常务委员会第二十四次会议通过&#xff09;该法自2017年6月1日起施行。《网络安全法》是我国第一…...

Mybatis-plus-Join--分页查询

数据表四张&#xff1a; user&#xff1a; id,username,create_time,update_time product&#xff1a; id,name,price,number(库存),create_time,update_times order&#xff1a; id,quantity,order_time(下单时间),update_time order_detail:id,product_id,order_id,quant…...

EE308FZ_Sixth Assignment_Beta Sprint_Sprint Essay 5

Assignment 6Beta SprintCourseEE308FZ[A] — Software EngineeringClass Link2401_MU_SE_FZURequirementsTeamwork—Beta SprintTeam NameFZUGOObjectiveSprint Essay 5_Day9-Day10 (12.19-12.20)Other Reference1. WeChat Mini Program Design Guide 2. Javascript Style Gui…...

【AI日记】24.12.19 kaggle 比赛 2-8 | 睡眠质量提高

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 参加&#xff1a;kaggle 比赛 Regression with an Insurance Dataset时间&#xff1a;8 小时 读书 书名&#xff1a;富兰克林自传时间&#xff1a;0.5 小时阅读原因&#xff1a;100 美元纸币上的人物 …...

string

1.对象创建 // // Created by 徐昌真 on 2024/12/15. // #include <iostream> #include <string>using namespace std;int main() {string s "意思是不要沉迷于空洞的幻想 也不要追求无用的虚名 强调了做事要脚踏实地 专注于实际的目标与行动";// 1. 无…...

观龙鱼之态,察疾病之征

龙鱼&#xff0c;以其独特的外形、优雅的游姿&#xff0c;成为众多养鱼爱好者的心头好。然而&#xff0c;这些水中的 “精灵” 一旦患病&#xff0c;其状态会发生明显变化。了解龙鱼患病的表现&#xff0c;对于鱼主人及时发现并治疗至关重要。 当龙鱼出现食欲不振的情况时&…...

【NLP 16、实践 ③ 找出特定字符在字符串中的位置】

看着父亲苍老的白发和渐渐老态的面容 希望时间再慢一些 —— 24.12.19 一、定义模型 1.初始化模型 ① 初始化父类 super(TorchModel, self).__init__()&#xff1a; 调用父类 nn.Module 的初始化方法&#xff0c;确保模型能够正确初始化。 ② 创建嵌入层 self.embedding n…...

一.photoshop导入到spine

这里使用的是 photoshoptospine脚本 下载地址:https://download.csdn.net/download/boyxgb/90156744 脚本的使用,可以通过文件的脚本的浏览,浏览该脚本使用该脚本,也可以将该脚本放在photoshop安装文件夹里的script文件夹下,具体路径:Photoshop\Presets\Scripts,重启photosho…...

docsify

macos ➜ ~ node -v v16.20.2➜ ~ npm --version 8.19.4全局安装 docsify-cli 工具 npm i docsify-cli -g➜ ~ docsify -vdocsify-cli version:4.4.4初始化项目 docsify init ./docsls -ah docs . .. .nojekyll README.md index.htmlindex.html 入口文件README.md 会…...

在Windows Server路由和远程访问服务中启用L2TP/IPsec VPN

背景 路由和远程访问服务&#xff08;Routing and Remote Access Services&#xff0c;RRAS&#xff09;是Windows Server上的一个角色&#xff0c;包含很多功能&#xff0c;可以用来搭建VPN。然而&#xff0c;在什么也不做的初始配置中&#xff0c;它只允许PPTP协议连接。然而…...

感知机收敛性定理证明

1. 问题描述 感知机收敛性定理假设&#xff1a; 存在一个参数向量 θ&#xff08;被归一化为单位向量&#xff0c;&#xff0c;以及一个正数 &#xff0c;使得对所有训练样本 满足&#xff1a; 这是线性可分的假设&#xff0c;意味着每个样本点与正确超平面之间有一个至少为的…...

监控易平台:提升IDC 数据中心运维效率与质量

一、引言 随着信息技术的飞速发展&#xff0c;IDC 数据中心作为信息存储、处理和传输的核心枢纽&#xff0c;其规模和复杂性不断增加。数据中心的稳定运行对于企业业务的连续性和发展至关重要&#xff0c;然而&#xff0c;传统的运维方式在面对日益增长的运维需求时&#xff0c…...

WordPress 资源展示型下载类主题 CeoMax-Pro_v7.6 开心版

WordPress 资源展示型下载类主题 CeoMax-Pro_v7.6 开心版&#xff1b; CeoMax-Pro是一款极致美观强大的WordPress付费资源下载主题&#xff0c;它能满足您所有付费资源下载的业务需求&#xff01; 你的想法与业务不能被主题所限制&#xff01;CeoMax-Pro强大的功能&#xff0…...

java数据类型(补充-引用类型)

Java还提供了引用数据类型&#xff08;Reference Types&#xff09;。这些类型的变量存储的是对象的引用&#xff0c;而不是直接存储值。引用数据类型主要包括以下几类&#xff1a; 类型描述类(Class)每个对象都有自己的状态&#xff08;属性或字段&#xff09;、行为&#xf…...

【WRF教程第四期】WRF 初始化概述:以4.5版本为例

WRF 初始化&#xff08;WRF Initialization&#xff09; Building Initialization Programs编译方式 理想案例初始化&#xff08;Initialization for Idealized Cases&#xff09;理想化案例的输入可用的理想化案例 现实案例初始化&#xff08;Initialization for Real Data Ca…...

「Mac畅玩鸿蒙与硬件47」UI互动应用篇24 - 虚拟音乐控制台

本篇将带你实现一个虚拟音乐控制台。用户可以通过界面控制音乐的播放、暂停、切换歌曲&#xff0c;并查看当前播放的歌曲信息。页面还支持调整音量和动态显示播放进度&#xff0c;是音乐播放器界面开发的基础功能示例。 关键词 UI互动应用音乐控制播放控制动态展示状态管理按钮…...

Navicat 17 功能简介 | SQL 美化

SQL美化 本期&#xff0c;我们将深入挖掘 Navicat 的实用的SQL代码美化功能。你只需简单地点击“SQL 美化”按钮&#xff0c;即可轻松完成 SQL 的格式化。 随着 17 版本的发布&#xff0c;Navicat 也带来了众多的新特性&#xff0c;包括兼容更多数据库、全新的模型设计、可视化…...

C++ 只出现一次的数字 - 力扣(LeetCode)

点击链接即可查看题目&#xff1a;136. 只出现一次的数字 - 力扣&#xff08;LeetCode&#xff09; 一、题目 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间…...