流编程思想

流编程思想

程序可以看作流,任何程序执行的过程都可以看成是流动的过程。基于这个思想,我们可以将程序划分为数据流与控制流。

数据流是数据实现的过程,对于相同的任务需求,最终数据流都会流向相同的地方,笔者进行举例,以数组操作为例:
在这里插入图片描述

为了更方便抽象出流的概念,笔者决定将其转化为汇编,这样操作尺度更小,更容易观察程序流。

数组每个成员加一既是结果,也是过程的必然,但是考虑一下两种情况:

f2就是常量1,x1就是数组地址起始处。

第一种

在这里插入图片描述

耗费的时钟周期计算:(1+2)*4 + 12个指令 = 24个时钟周期

第二种

在这里插入图片描述

耗费的时钟周期计算:0 + 12个指令 = 12个时钟周期。

从上面可以看出,两种情况的数据移动操作流向是相同的,但是第二种操作明显优于第一种,它的并行性明显更好,可读性也更好。

数据流,就是固定的三个指令,完成加载、相加、存储的这三个指令,所以说从流向来看,数据流是固定的。虽然可能使用的寄存器不同,但过程是相同的,它一定会流向固定的过程和结果。

控制流就是控制指令执行顺序,可以看出,第二种明显优于第一种,这就是控制流调度的结果。

结论

从以上可以看出,两种方法的数据流都是相同的,因为它们流向的结果是一致的。如果不考虑可读性等因素,只考虑性能,对于所有完成相同任务的程序员来说,他们的水平差距其实只体现在控制流。

综上,程序流可以被划分为数据流和控制流。数据流的流向相同,因此数据流的优化方向是将其划分为更小的尺度,程序的架构可以被划分为无数个更细的数据流的组合。

控制流的优化方向是调度数据流,它决定了程序执行的顺序,不同的数据流顺序对程序的性能影响天差地别。

分离控制流与数据流

下面笔者以c语言为例,讲解如何分离控制流与数据流,

原程序:
在这里插入图片描述

现在的这种形式经常被我们采用,但是大量的if循环很明显没有完成对控制流和数据流的分离,再看看这个程序:
在这里插入图片描述

消除了大量的if判断,并且使得控制部分更加简洁明了,程序的解耦合性和可扩展性明显更好。

流编程的思想就像笔者所说的那样,分离控制流与数据流,对数据流不断进行分割,对控制流的策略不断进行优化,使程序具备更好的性能和可维护性。根据笔者的认知,可能流编程更适合微架构和高并发的场景,例如微内核。在这里,程序的复杂性和策略性大大提高,这是对控制流的要求,程序执行的尺度需要不断细化从而提高资源利用率和性能,这又是对数据流的要求。

以上就是是笔者的随笔,just for fun,写着玩的,切莫当真。

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

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

相关文章

VBA高级应用30例应用3在Excel中的ListObject对象:创建表

《VBA高级应用30例》(版权10178985),是我推出的第十套教程,教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开,这套教程案例与理论结合,紧贴“实战”,并做“战术总结”,以…

【AI】OCR篇1

每日更新,建议关注、收藏、点赞 ocr流程 版面分析 、预处理-> 行列切割 -> 字符识别 -> 后处理识别矫正 判断页面上的文本朝向,图像预处理,做角度矫正和去噪。对文档版面进行分析,进每一行进行行分割,把每…

用户体验至上:9款软件界面设计工具分享

你知道如何选择正确的UI设计软件吗?您知道哪些界面设计软件需要设计美观的用户界面,以及带来良好用户体验的APP吗?根据APP界面的不同功能,制作软件界面的选择也会有所不同。但是,并非要非常精通所有的制作软件界面&…

【Python基础】Python六种标准数据类型中哪些是可变数据,哪些是不可变数据

文章目录 1.基本介绍可变数据类型不可变数据类型2.可变和不可变到底指的是什么?可变(Mutable)不可变(Immutable)总结1.基本介绍 Python 中的六种标准数据类型分为可变数据类型和不可变数据类型。以下是这些数据类型的分类: 可变数据类型 列表(List) 列表是一种有序集…

使用 MRI 构建的大脑连接网络预测帕金森病萎缩进展模式| 文献速递-基于深度学习的乳房、前列腺疾病诊断系统

Title 题目 Brain Connectivity Networks Constructed Using MRI for Predicting Patterns of Atrophy Progression in Parkinson Disease 使用 MRI 构建的大脑连接网络预测帕金森病萎缩进展模式 Background 背景 Whether connectome mapping of structural and across …

【数据结构-前缀哈希】力扣3026. 最大好子数组和

给你一个长度为 n 的数组 nums 和一个 正 整数 k 。 如果 nums 的一个 子数组 中,第一个元素和最后一个元素 差的绝对值恰好 为 k ,我们称这个子数组为 好 的。换句话说,如果子数组 nums[i…j] 满足 |nums[i] - nums[j]| k ,那么…

性能测试学习笔记

一、性能测试是什么? 1.生活案例: 学校选课系统,就会经常崩溃!!!! 2.性能测试的定义 测试人员借助测试工具,模拟系统在不同场景下,对应的性能指标是否达到预期 3.性能…

Spring -- 事务

Spring中事务的操作分为两类:(1)编程式事务 – 手动写代码操作事务(2)声明式事务 – 利用注解开启事务和提交事务 1. 编程式事务 准备Controller RestController RequestMapping("/user") public class UserInfoController {Autowiredprivate UserInfoService use…

JAVA开发学习-day21

JAVA开发学习-day21 1. 删除表单数据 根据ElementUI的官方组件指南&#xff0c;为表单每列的数据添加删除按钮 <el-table :data"tableData" style"width: 100%"><el-table-column prop"id" label"ID" width"180"…

SpringBoot基础(一):快速入门

SpringBoot基础系列文章 SpringBoot基础(一)&#xff1a;快速入门 目录 一、SpringBoot简介二、快速入门三、SpringBoot核心组件1、parent1.1、spring-boot-starter-parent1.2、spring-boot-dependencies 2、starter2.1、spring-boot-starter-web2.2、spring-boot-starter2.3、…

Visual Studio 和 Visual Studio Code 的比较与应用偏向

Visual Studio 和 Visual Studio Code&#xff08;VS Code&#xff09;是微软开发的两个不同的开发工具&#xff0c;各有特点和优势&#xff0c;适用于不同的开发需求。下面是详细的比较和在实际应用中的偏向。 功能和特性 Visual Studio 完整的IDE&#xff1a;支持多种编程…

海外短剧小程序 ,竖屏会员付费看剧系统搭建paypal,stripe对接支付功能

目录 前言&#xff1a; 一、系统功能 二、系统常见问题 总结&#xff1a; 前言&#xff1a; 在全球化的今天&#xff0c;短剧作为一种新兴的内容形式&#xff0c;正迅速赢得国际观众的心。尤其是海外市场的短剧推广&#xff0c;正成为内容创作者和营销者的新宠。本文将深入…

Adobe Substance 3D Sampler v4.2.2.3719 解锁版下载及安装教程(3D材质管理软件)

前言 Substance 3D Sampler简称“Sa”是一款由Adobe新推出的3D真实材质贴图制作软件。允许用户通过调整和混合现有材料&#xff0c;或通过扫描&#xff08;单个或多个图像&#xff09;中提取新材料来创建和迭代材料集合&#xff0c;从而轻松将真实的图片转换为具有真实感的表面…

JavaEE从入门到起飞 (三) ~AOP

晚上好&#xff0c;愿这深深的夜色给你带来安宁&#xff0c;让温馨的夜晚抚平你一天的疲惫&#xff0c;美好的梦想在这个寂静的夜晚悄悄成长。 目录 文章目录 前言 了解面向切面编程&#xff08;AOP&#xff09; 什么是面向切面编程&#xff08;AOP&#xff09;&#xff1f…

二、Matlab图像处理基础

文章目录 一、Matlab图像处理工具箱二、图像文件的读取2.1 文件信息的读取2.2 图像文件的读取2.3 图像文件的保存2.4 图像文件的显示2.5 像素信息的显示 本章知识点总结 一、Matlab图像处理工具箱 在帮助文档可以搜索到图像处理工具箱的介绍 二、图像文件的读取 2.1 文件信息…

回归评价指标

这里写目录标题 1. 均方误差MSE2. 均方根误差RMSE3. 平均绝对误差MAE4. R^2^5. 调整后R^2^ 1. 均方误差MSE 回归数据和原始数据误差的平方和/原始数据个数平方的原因&#xff1a;不平方正负误差会抵消&#xff0c;对大误差更为敏感&#xff0c;在一些场景下更能凸显出模型预测…

41.【C语言之外】聊聊Cheat Engine官方教程步骤6的思考

0.看前须知 有一定指针概念的基础 推荐阅读前几篇博文&#xff1a; 19.【C语言】指针&#xff08;重难点&#xff09;&#xff08;A&#xff09; 37.【C语言】指针&#xff08;重难点&#xff09;&#xff08;B&#xff09; 38.【C语言】指针&#xff08;重难点&#xff09…

【python】模块包

前言 模块化是python中的重要知识。随着我们接触的工程项目变得越来越大时&#xff0c;就需要把我们的运行代码进行拆解以便我们检查和项目的推进。有些时候&#xff0c;几个程序都需要同一个功能&#xff0c;那python就提供一种方法&#xff0c;把需要重复利用的代码放在同一…

Spring Boot 3.x Web MVC实战:实现流缓存的request

上一节《Spring Boot 3.x Filter实战&#xff1a;记录请求日志》实践最后遇到了request对象的流不可重复读的问题&#xff0c;本小节我们将通过流数据缓存以及流的装饰器模式来解决这个问题。如果觉得对你有帮助&#xff0c;记得点赞收藏&#xff0c;关注小卷&#xff0c;后续更…

Linux部署MySQL8.0

目录 一、部署前准备1.1、查看系统版本和位数&#xff08;32位或64位&#xff09;1.2、下载对应安装包 二、开始部署1、将安装包解压并且移动到目标安装目录2、准备MySQL数据和日志等存储文件夹3、准备MySQL配置文件 my.cnf4、创建mysql单独用户组和用户&#xff0c;将安装目录…