一概述

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一概述相关的知识,希望对你有一定的参考价值。

编译程序

高级语言程序 \\(\\rightarrow\\) 编译程序 \\(\\rightarrow\\) 低级语言程序(汇编语言或者机器语言)

解释程序

源程序 \\(\\rightarrow\\) 解释程序 \\(\\rightarrow\\) 输出

编译过程(5个阶段)

1. 词法分析
  • 任务:输入源程序,对字符串扫描分解,识别出单词符号
  • 依据原则:构词规则
  • 描述工具:有限自动机
2. 语法分析
  • 任务:在词法分析基础上,把单词符号串分解成各类语法单位
  • 依据原则:语法规则
  • 描述工具:上下文无关文法
3. 语义分析与中间代码生成
  • 任务:对各类语法单位按语言的语义进行初步翻译
  • 依据原则:语义规则
  • 描述工具:属性文法
4. 代码优化
  • 任务:对中间代码加工变换,提高目标代码的时空效率
  • 依据原则:程序等价变换规则
5. 目标代码生成
  • 任务:将中间代码变换成特定机器上的目标代码

目标代码三种形式

  1. 汇编指令代码:需要进行汇编
  2. 绝对指令代码:可直接运行
  3. 可重定位指令代码:需要链接

编译程序的结构

编译的遍

对源程序或源程序的中间结果从头到尾扫描一次

  • 一遍扫描:占用内存空间大,但编译速度慢
  • 多遍扫描:程序结构清晰,目标代码质量较高,但编译速度较慢

编译的前端

与源语言有关,词法分析、语法分析、语义分析与中间代码生成、与硬件无关的优化

编译的后端

与目标机器有关,与硬件有关的优化、目标代码生成

\\(\\large Tips:\\)

  • 编译程序绝大部分时间花在符号表管理

  • 中间代码生成代码优化部分不是每个编译程序都必需的

SpringCloudAlibaba(一):概述与重要组件

参考技术A

前一篇提到了我们为什么要替换PHP语言采用Java语言。而Java语言的框架选型上来说有太多的选择,常见的有Dubbo,SpringCloud等。我们选择了SpringCloudAlibaba。替换PHP语言到SpringCloudAlibaba是个大工程,主要是业务迁移部分。讨论之初我也确认过是否迁移原有的业务,得到的明确答复是 迁移 。 那么这么来说也就简单了,复杂的就是工期问题了。

SpringCloud Alibaba是Alibaba结合自身的微服务实践开源的一套微服务全家桶 ,在SpringCloud项目中进行孵化并且毕业。既然是SpringCloud的项目那么阿里云其实包含其商业化的产品。 例如Nacos在阿里云就有其商业化的版本 MSE 。 同时SpringCloud Alibaba的相关组件是经历过双十一大促考验的产品。稳定性较高。

SpringCloud Alibaba是SpringCloud的子项目,其实很多相关的文章都提到了SpringCloud Alibaba与SpringCloud的关系,其中有很多的论点都比较有意思。大家可以去搜索一下。
SpringCloud Alibaba是依赖SpringCloud相关的标准实现的一套微服务的架构。结合阿里巴巴的相关实践与阿里云的相关服务实现的一些组件得以更快的实现相关产品业务。

Nacos实现了服务的配置中心与服务注册发现的功能,Nacos可以通过可视化的配置降低相关的学习与维护成本,实现动态的配置管理与分环境的配置中心控制。 同时Nacos提供了基于http/RCP的服务注册与发现功能。

Sentinel是面向分布式微服务架构的轻量级高可用的流控组件,以流量作为切入点,从流量控制,熔断降级,系统负载保护等维度帮助用户保证服务的稳定性。常用与实现限流、熔断降级等策略。

RocketMQ基于Java的高性能、高吞吐量的消息队列,在SpringCloud Alibaba生态用于实现消息驱动的业务开发,常见的消息队列有Kafka、RocketMQ、RabbitMQ等,相关的比较文档可以自行去翻阅。

既然是微服务的产品,那么肯定会用到分布式事物。Seata就是阿里巴巴开源的一个高性能分布式事物的解决方案。

Dubbo已经在圈内很火了,SpringCloud Alibaba基于上面提到的Nacos服务注册中心也同样整合了Dubbo。

SpringCloud Alibaba还有一些其他的组件选择,例如schedulerX、SMS、OSS等。但是由于其主要是阿里云的商业化产品就不再过多的进行介绍。集成其商业化产品时才能用到。

SpringCloud Alibaba是基于SpringCloud标准由阿里巴巴实现的微服务全家桶,可插拔的方式实现组件的替换,在某些场景中我们需要的组件可以自由进行选择。例如需要分布式链路跟踪我们可以增加sleuth组件用于实现分布式链路跟踪业务等。
很多人提到SpringCloudAlibaba的商业问题,记得当年SpringCloudAlibaba推出第一版的时候我也评论了...卖产品全家桶。不可否认是有那么一些,但是其实它本身的很多组件又不一定非要选择商业版本。这个可以自由进行选择。

以上是关于一概述的主要内容,如果未能解决你的问题,请参考以下文章

一Linux的概述

一Linux的概述

Java基础总结一(概述基础知识)

Java基础总结一(概述基础知识)

Java基础总结一(概述基础知识)

渲染管道几何阶段一“概述”