[架构之路-256]:目标系统 - 设计方法 - 软件工程 - 软件设计 - 架构设计 - 软件系统不同层次的复用与软件系统向越来越复杂的方向聚合

目录

前言:

一、CPU寄存器级的复用:CPU寄存器

二、指令级复用:二进制指令

三、过程级复用:汇编语言

四、函数级复用:C语言

五、对象级复用:C++, Java, Python

六、组件级复用

七、服务级复用

八、微服务级复用


前言:

物质世界的无序向有序的聚合
软件系统的无序向有序的聚合
皆为设计,用来对抗熵增
不同程序员在不同层面,通过消耗能量,努力使得二进制信号由无序向更高阶的有序运动,构建一个个聚合程度越开越高的软件系统和虚拟世界。

编程与写文章类似,就是通过组合不断生成更加复杂的系统:

  • 文字:可以用活字印刷技术印刷各种短文、声明、公告、广告等等。
  • 段落:印刷技术可以将不同的文字排列成为一个段落,从而形成更为清晰的表达。
  • 文章:使用活字印刷技术可以将一系列段落组合起来,形成一篇完整的文章,例如新闻文章、学术论文等等。
  • 小说:活字印刷技术可用于印刷长篇小说、故事集等等小说类作品,这对小说的传播和流行起到了重要的作用。
  • 系列:使用活字印刷技术可以印刷一系列相关的作品,例如连载小说、杂志期刊等等,这对于增加读者的持续性阅读和订阅率非常重要。

一、CPU寄存器级的复用:CPU寄存器

CPU 寄存器是计算机中用于存储临时数据和指令执行的高速存储区域。复用 CPU 寄存器是一种优化技术,通过在不同的执行阶段或上下文中,共享寄存器的存储空间,以提高 CPU 的执行效率。下面是几种常见的 CPU 寄存器级的复用技术:

  1. 指令执行步骤:在 CPU 指令的执行过程中,使用不同的寄存器存储不同阶段的计算结果和临时数据。各个阶段依次复用寄存器,以避免在每个阶段都从内存中加载和存储数据,从而减少数据传输的开销,提高执行效率。

  2. 函数调用:在函数调用中,寄存器可以用于传递参数、保存返回值和存储临时变量。为了最大程度地利用寄存器,可以使用调用惯例规定寄存器的用途和约定,以避免频繁地将数据存储到内存中。

  3. 上下文切换:在操作系统调度不同的进程或线程时,必须保存和恢复寄存器的状态。为了提高上下文切换的效率,可以选择只保存和恢复必要的寄存器,将其余的寄存器用于执行其他任务,从而减少上下文切换的时间开销。

  4. 寄存器重命名:寄存器重命名是一种动态寄存器复用技术,通过将程序中的命名寄存器映射到物理寄存器集合中的可用位置,以避免数据依赖和冲突。这可以提高指令级并行性和执行效率,减少数据相关性的等待时间。

这些复用技术都旨在最大程度地利用 CPU 寄存器的存储空间,以提高计算机系统的性能。但要注意,在进行寄存器级的复用时,需要细致地进行计算和调度,以确保数据的正确性和一致性。同时,具体的寄存器复用策略也与硬件架构和编译器优化密切相关。

二、指令级复用:二进制指令

指令级复用是一种计算机体系结构技术,可以通过共享计算机硬件中已经存在的组件,来实现并行处理多个任务。在指令级复用中,多条指令可以同时在计算机处理器上执行,从而提高计算机的处理能力。

而二进制指令是计算机中的基本指令,用于执行特定的操作。计算机可以根据这些指令执行不同的操作,例如将数据从一个位置移动到另一个位置,进行算术和逻辑运算,以及跳转到不同的指令地址等等。

在指令级复用中,计算机可以同时执行多条二进制指令,从而实现更高效的处理。这可以通过让多个程序同时使用同一组硬件资源来实现,或者通过多核处理器来实现。

总之,指令级复用是一种计算机体系结构技术,可以通过同时执行多条二进制指令来提高计算机的处理能力。

ARM指令的个数是很难准确给出的,因为它会随着不同版本和架构的推出而变化。 每个ARM架构上支持的指令数不同,而且不同的公司和开发人员也会创建自己的定制指令和指令集。

例如,最初的ARMv1架构仅支持30个指令,而当前最新的ARMv9架构的指令数量则可能达到数百条以上。这些指令可以支持不同的编程模型、操作类型和数据类型,以满足不同应用的需求。

此外,ARM还推出了许多其它的指令集扩展,如Thumb、Thumb-2 和 NEON 等。Thumb是一种压缩指令集,可使用更少的存储空间执行常见的指令,且可与ARM指令混合使用。而NEON是一种用于多媒体和信号处理应用的 SIMD 指令集。

总之,由于ARM架构和指令集的不断扩展和变化,ARM指令的具体数量是一个相对灵活的概念,但近年来,通常情况下ARM指令的个数都是在数百条级别。

备注:

纷繁复杂的软件系统,不过就是有限指令的组合而已。

三、过程级复用:汇编语言

软件复用是指在开发软件时,重复使用已经存在的软件组件或模块的过程。通过软件复用,可以提高开发效率、减少重复编码工作,并增加软件系统的可靠性和稳定性。

过程级复用是软件复用的一种形式,它是指通过复用已经编写好的过程或函数来实现软件复用。在汇编语言中,过程级复用可以通过使用宏指令(macro instructions)来实现。

汇编语言是一种低级别的编程语言,与特定的计算机体系结构和指令集密切相关。在汇编语言中,程序员可以直接使用底层的机器指令来编写程序。汇编语言的程序通常由许多过程或函数组成,每个过程或函数执行特定的操作。

为了实现过程级复用,程序员可以编写通用的汇编代码,将其中的可变部分设为参数,通过使用宏指令的方式进行复用。这样,每次需要使用该功能时,可以在程序中调用该宏指令,并传递相应的参数。

通过使用汇编语言的过程级复用,程序员可以重复使用已经编写好的汇编代码,避免重复编写相同的操作,减少代码冗余,并提高代码的可维护性和可复用性。

需要注意的是,汇编语言是一种底层的编程语言,编写汇编代码需要具备一定的计算机体系结构和指令集的知识。对于大多数开发项目来说,使用高级语言和现代的开发工具可能更加高效和便捷。但在一些特定的场景下,使用汇编语言进行过程级复用仍然是一种有效的方式。

四、函数级复用:C语言

函数级复用是软件复用的一种形式,它是指通过复用已经编写好的函数来实现软件复用。在现代编程语言中,C语言是最通用的一种,也是非常适合实现函数级复用的一种。

在C语言中,函数是带有特定名称的代码块,在程序中可以多次调用。程序员可以编写具有通用性的函数,并将其在不同的程序中重用。通过函数级复用,程序员可以节省时间和代码量,并提高软件开发的效率和可维护性。

C语言中的函数可以有多个形参(参数),这使得函数即使能处理一定的抽象度,也能与其他函数进行交互。程序员可以通过定义和调用自己的函数来实现模块化设计。当程序员在他们的代码中使用通用功能函数时,可以大大减少重复代码,使程序更易于维护和修改。

此外,C语言还提供了库函数,使得程序员可以使用编写好的函数库来更加方便地实现软件复用。库函数是预先编写的、经过测试的通用函数,可以在程序中重复使用。例如,在C语言的标准库中,有许多文件处理和字符串处理等常用功能的函数,程序员可以直接调用这些函数来实现所需的功能,避免了重复编写相同的代码。

总之,C语言提供了函数级复用的机制,使得程序员可以方便地编写通用性函数,并在不同的程序中进行复用,达到降低重复代码、提高开发效率和可维护性的效果。

五、对象级复用:C++, Java, Python

对象级复用是软件复用的一种形式,它是指通过复用已经存在的对象或类实现软件复用。在面向对象的编程语言中,如C++、Java和Python,对象级复用是非常普遍和重要的。

在C++语言中,可以使用类和对象的概念来实现对象级复用。程序员可以定义具有特定属性和行为的类,然后通过创建对象来使用这些类。通过对象的创建和调用方法,程序员可以重用已经编写好的类的功能,并在不同的程序中进行复用。C++还提供了继承和多态等特性,使得对象级复用更加灵活和强大。

类似地,在Java语言中,也可以使用类和对象的概念来实现对象级复用。Java是一种面向对象的编程语言,它提供了丰富的类库和API,程序员可以在程序中使用这些现有的类和对象,以实现特定的功能。

Python也是一种面向对象的编程语言,其对象级复用也是基于类和对象的概念。Python提供了灵活的类定义和对象实例化的机制,程序员可以使用现有的类和对象,或者通过编写自己的类来实现对象级复用。

通过对象级复用,程序员可以利用已有的类和对象,减少代码冗余,提高代码的可读性、可维护性和可复用性。在开发过程中,可以重用现有的类和对象,并在需要的地方进行定制和扩展,以满足特定的需求。

总结来说,C++、Java和Python等面向对象的编程语言提供了丰富的对象级复用机制,程序员可以通过定义和使用类和对象来实现软件复用。这种复用方式可以提高开发效率、降低代码冗余,并使得程序更易于维护和扩展。

六、组件级复用

组件级复用是软件复用的一种形式,它是指通过复用已经编写好的组件来实现软件复用。在软件开发过程中,组件可以看作是可独立部署、可重用、具有清晰接口的软件单元。

一种常见的组件级复用方法是使用面向服务的体系结构(Service-oriented architecture,SOA)。SOA是一种基于服务的系统设计方法,它将软件系统拆分成一系列互相独立、可重用的服务。每个服务都有一个标准的接口,可以被其他组件或应用程序所调用。这种方式可以提高软件的可重用性、可扩展性和灵活性。

另一种常见的组件级复用方法是使用组件框架。组件框架是一个软件组件库,其中包含了数个已经实现了特定功能的组件。程序员可以使用框架提供的组件进行开发,从而加快项目进度。同时,由于组件框架一般都有一套标准的创造和使用方法,因此编程过程变得更加标准化和规范化,代码质量和软件可维护性也能够得到提高。

此外,还有一些可视化编程工具和集成开发环境(Integrated Development Environment,IDE)可以帮助程序员实现组件级复用。这些工具提供了可视化的拖-放式组件库和代码生成器,可以帮助程序员快速创建复杂的软件系统,并重用现有的组件。

总之,组件级复用是一种非常有效的软件复用方式,可以通过使用面向服务的体系结构、组件框架、可视化编程工具等手段来实现。组件级复用可以提高软件的可重用性、可扩展性和灵活性,降低软件开发成本,并提高软件系统的质量和可靠性。

七、服务级复用

服务级复用是软件复用的一种形式,它是指通过复用已经开发好的服务来实现软件复用。服务级复用是建立在面向服务的体系结构(Service-oriented architecture,SOA)上的。

在SOA中,软件系统被划分为多个独立的服务每个服务代表一个特定的功能或业务逻辑。这些服务通过定义清晰的接口进行通信,可以在不同的应用程序之间进行复用。每个服务都可以独立开发、测试、部署、升级和维护,从而提供了高度的灵活性和可重用性。

服务级复用的一个重要方面是通过服务接口进行交互。服务的接口定义了服务的功能和方法,其他应用程序或者组件可以通过调用服务的接口来使用该服务。这样一来,当服务的底层实现发生变化时,只需要确保服务接口的兼容性,而无需修改调用方的代码。

此外,服务级复用还可以通过服务注册与发现机制来实现。服务注册与发现机制允许开发人员在一个中心化的服务注册表或者类似的机制中注册他们开发的服务。其他应用程序或组件可以通过查询这个注册表来发现和使用已经注册的服务,从而实现服务级别的复用。

服务级复用提供了许多优势。首先,它促进了代码的模块化和解耦,提高了系统的可维护性和可扩展性。其次,它有效地避免了重复开发,减少了开发工作量。此外,通过使用已经存在的服务,可以节约时间和资源,并提高软件开发的效率。

总的来说,服务级复用是一种有效的软件复用方式,基于面向服务的体系结构,并通过定义清晰的接口和使用服务注册与发现机制来实现。服务级复用提供了高度的灵活性和可重用性,对于构建分布式、松耦合的软件系统非常有价值。

八、微服务级复用

微服务级复用是一种软件复用的形式,它是建立在微服务架构(Microservices Architecture)上的。微服务架构是一种通过将软件系统拆分为独立的小型服务来构建应用程序的方法

微服务架构中,软件系统由一组小型、独立的服务组成,每个服务都有自己的业务逻辑和数据存储。这些服务通过定义清晰的接口进行通信,可以在不同的应用程序之间进行复用。

微服务级复用的核心思想是通过重用已经构建好的微服务来实现软件复用。当一个功能或业务逻辑在多个应用程序中需要使用时,可以将其实现为一个微服务,并确保这个服务可以被其他应用程序调用和复用。

微服务级复用的一个重要特征是每个微服务都是独立部署和运行的。这意味着当一个微服务的功能发生变化时,只需更新该服务而不影响其他服务。这种隔离性和独立性使得微服务级复用更加灵活和可扩展。

微服务级复用还可以通过使用服务注册与发现机制来实现。服务注册与发现机制允许开发人员在一个中心化的注册表中注册他们开发的微服务。其他应用程序或组件可以通过查询这个注册表来发现和使用已经注册的微服务。

微服务级复用提供了许多优势。首先,它将系统拆分为小的、独立的服务,使得每个服务都可以独立开发、测试、部署和维护。这种模块化的设计提高了系统的可维护性、可扩展性和可测试性。其次,通过使用已经存在的微服务,可以节约时间和资源,并提高软件开发的效率。

总的来说,微服务级复用是一种有效的软件复用方式,基于微服务架构,并通过定义清晰的接口和使用服务注册与发现机制来实现。微服务级复用提供了高度的灵活性和可重用性,对于构建分布式、松耦合的软件系统非常有价值。

活字印刷是一种传统的印刷技术,它是在雕刻好的铜版或木版上,逐个印刷字符或图形,将它们排列拼合成为一张完整的印刷品。活字印刷技术最早诞生于中国,经过几百年的发展和改进,逐渐传播到欧洲和其他地区。在15世纪欧洲,德国的古腾堡发明了活字印刷机,并在短时间内大量印刷了《圣经》等书籍,这极大地推动了印刷术的发展,开启了印刷文化的新时代。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/206523.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机视觉-03-使用U-Net实现肾脏CT分割(包含数据和代码)

文章目录 0. 数据获取1. 介绍1.1 简介1.2 任务介绍1.3 数据集介绍1.3.1 介绍1.3.2 数据预处理建议 1.4 代码实现参考1.5 训练过程1.5.1 参数设置1.5.2 可视化1.5.3 结果分析 0. 数据获取 关注公众号:『AI学习星球』 回复:肾脏CT分割 即可获取数据下载。…

高精度时钟芯片SD2405

概要 SD2405是一款非常优秀的RTC解决方案,为了能让用户在Arduino上有一款方便易用的时钟模块。该模块是一款内置晶振,支持IIC串行接口的高精度时钟模块;内置一次性工业级电池,可保证外部掉电的情况下,可以继续工作5~8…

实例分割 Mask-RCNN

参考文章 使用LabelMe标注目标检测数据集并转换为COCO2017格式_labelme转coco-CSDN博客 数据集选择 voc 这次不选择voc,因为文件组织太难了 voc2012文件夹组织 COCO COCO介绍 MC COCO2017年主要包含以下四个任务:目标检测与分割、图像描述、人体关…

KP 2sv Authenticator一款免费处理亚马逊两步验证码的软件

KP 2sv Authenticator 被誉为一款免费而强大的亚马逊两步验证软件,操作简便轻松。 软件使用方法极为简单,用户只需直接输入身份验证应用程序生成的代码,即可迅速生成随机验证码,帮助用户顺利完成亚马逊的两步验证流程。这款小软件…

有了安卓模拟器,就能在Windows 10或11上像使用安卓操作系统一样使用安卓

你可以使用Android模拟器在Windows 11或Windows 10中运行Android应用程序。如果你喜欢的应用程序只在手机上运行,但你想在电脑上使用,这些模拟器会很有用。 BlueStacks 与整个操作系统模拟器不同,BlueStacks只在Windows上模拟Android应用程序。它真的很容易使用,所以你不需…

香港云服务器:全面介绍与使用场景分析

这几年基于国内互联网技术的发展,各类海外贸易的兴起,很多网站都启用了海外云服务。这其中,香港的 IDC 市场异常火爆。也不奇怪,就目前来看,国内大多数网站的访问用户在国内外均有涉及,而香港云服务器恰好满…

Java第二十一章总结

网络编程三要素 ip地址:计算机在网络中的唯一标识 端口:应用程序在计算机中唯一标识 协议:通信协议,常见有UDP和TCP协议 InetAddress类 表示Internet协议地址 //返回InetAddress对象 InetAddress byName InetAddress.…

全国公共汽车、出租车拥有情况及客运量、货运量数据,shp、excel数据均有,多指标可查询

基本信息. 数据名称: 全国公共汽车、出租车拥有情况及客运量、货运量数据 数据格式: Shp、Excel 数据时间: 2020-2022年 数据几何类型: 面 数据坐标系: WGS84 数据来源:中国城市统计年鉴 数据字段: 序号字段名称字段说明1xzqhdm行政区划代码…

机器学习基础知识分享:深度学习

深度学习(Deep Learning)是近年来发展十分迅速的研究领域,并且在人工智能的很多子领域都取得了巨大的成功.从根源来讲,深度学习是机器学习的一个分支,是指一类问题以及解决这类问题的方法。 深度学习 为了…

vue中的内置指令v-model的作用和常见使用方法以及自定义组件上的用法

一、v-model是什么 v-model是Vue框架的一种内置的API指令,本质是一种语法糖写法,它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。在Vue中,v-model是用于在表单元素和组件之间创建双向数据绑定的指令。它…

【AIGC】大语言模型的采样策略--temperature、top-k、top-p等

总结如下: 图片链接 参考 LLM解码-采样策略串讲 LLM大模型解码生成方式总结 LLM探索:GPT类模型的几个常用参数 Top-k, Top-p, Temperature

【动态规划系列】环形子数组的和-918

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

linux下的进程程序替换

进程程序替换 替换概念替换函数execl()execv()execvp()/execlp()execle()/execvpe() 如何在C/C程序里面执行别的语言写的程序。小tips 替换概念 当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的代码部分开始运行。调用…

爬虫 selenium语法 (八)

目录 一、为什么使用selenium 二、selenium语法——元素定位 1.根据 id 找到对象 2.根据标签属性的属性值找到对象 3.根据Xpath语句获取对象 4.根据标签名获取对象 5.使用bs语法获取对象 6.通过链接文本获取对象 三、selenium语法——访问元素信息 1.获取属性的属性值…

有爱的冬天不再冷——壹基金儿童温暖包抵达富平

12月6日,富平县帮帮乐公益协会组织志愿者在协会楼下分装了由爱心企业、个人捐赠的144个壹基金儿童温暖包,争取在下周寒流来临前送到困境儿童手中,温暖他们的整个冬天。 壹基金温暖包项目是针对6—12岁困境儿童、留守儿童设计的暖冬应急生活物…

MySQL数据库sql语句操作

一、数据库模型 关系型数据库是一种以表格形式组织和存储数据的数据库。它使用关系模型,其中数据被组织为多个表格,每个表格包含了多个行和列。每个表格的列描述了数据的属性,而行包含了实际的数据记录。 非关系型数据库,也称为…

使用命令行创建vue3项目等待时间长解决方案

问题描述 今天在使用命令行创建vue3项目的时候,发现命令行窗口卡了很久,明明已经更换了安装包的源,并且检查环境变量配置正确的情况下,为什么还要等待那么久呢? 解决方案 使用命令再次检查更换淘宝的源是否配置成功…

玩转系统|利用HestiaCP自建NS解析及邮局并利用MailGun进行发信

前述 HestiaCP是一个VestaCP分叉来的产物,而同样作为VestaCP分叉来的myVesta也具有类似的功能。VestaCP本身作为一个社区的产区,其仅仅有一个商业插件需要每月付费5USD进行使用,因此为了达到完全开放使用的目的,这里选择使用Hest…

小电流MOSFET 选型分析数据,可应用于电子烟,电动工具,智能穿戴等产品上

小电流双N,D-N通道MOSFET,电压60V-100V左右 电流300mA-500MA,采用封装形式多样。具有低导通电阻,可快速切换速度,易于设计的驱动电路也易于并联,ESD保护,低电压驱动使该器件非常适合便携式设备…

通俗易懂的案例+代码解释AOP 切面编程

目录 1. 理解AOP2 Before2.1 controller层2.2 service层2.3 自定义注解2.4 切面 advice 3 After4 Around spring的三大核心:IOC控制反转、DI依赖注入、AOP面向切面编程 刚开始接触springboot项目,前两个使用的多,亲自使用AOP的机会并不多&…