常用的软件技术思想-池化技术等-阿里云开发者社区

开发者社区> 黄威的世界> 正文

常用的软件技术思想-池化技术等

简介:
+关注继续查看

池化技术

实际案例
今天去公司食堂吃早点,排了一队人,先是包子馒头,然后是韭菜盒子,各种饼,最后是喝的,比如小米粥,黑米粥,豆浆等,
发现队伍阻塞在最后那一段(小米粥,黑米粥,豆浆)了,这个说要黑米粥,阿姨忙不迭地去打黑米粥,那个说要小米粥,阿姨赶紧去打小米粥。。。
阿姨已经没有功夫来决定打哪个了。
那么我们看看另外一种情况,阿姨提前做好囤货的工作,比如小米粥,黑米粥,豆浆各打10碗放着,谁要谁自己拿。阿姨的工作就不用围着顾客团团转了,而是看哪个少了,就打哪个,比如发现黑米粥还剩下3碗了,那么就多打黑米粥。

简单来说就是提前保存大量的资源,以备不时之需

核心是复用

池化技术作用

  1. 复用相同的资源,减少浪费,减少新建和销毁的成本;
  2. 减少单独管理的成本,统一交由"池";
  3. 集中管理,减少"碎片";
  4. 提高系统响应速度,因为池中有现成的资源,不用重新去创建;

使用池化技术的例子

java线程池

java中所有的池化技术都有一个好处,就是通过复用池中的对象,降低系统资源消耗。设想一下如果我们有n多个子任务需要执行,如果我们为每个子任务都创建一个执行线程,而创建线程的过程是需要一定的系统消耗的,最后肯定会拖慢整个系统的处理速度。而通过线程池我们可以做到复用线程,任务有多个,但执行任务的线程可以通过线程池来复用,这样减少了创建线程的开销,系统资源利用率得到了提升!

通俗一点,线程池,就是提前创建 n 个线程在池中等待执行,当有任务过来时,直接从池中捞一个线程负责执行这个任务,执行完成之后,再放回池中,等待执行新的任务。
池中的线程可以多次利用,提高了资源利用率。
因为会预制 n 个线程,所以提高了响应速度。

数据库连接池

数据库连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等,也可以通过其自身的管理机制来监视数据库连接的数量、使用情况等

java 内存池

如果每次需要内存时都是重新申请,会产生很多内存碎片,影响内存的利用率。
如果一开始就申请一大块内存,按需使用,那么就会减少内存碎片。

计算系统池化技术

不同类型资源之间也存在生命周期不同步的问题。譬如,CPU 是发展速度最快的,每两三年就性能翻倍,然而存储的技术发展相对缓慢,从而会造成CPU性能和功耗的浪费。  服务器资源池化技术,除了能够带来灵活、弹性的资源部署,提高资源利用率这个优势,还能够更有效的提高服务器的故障修复能力,提升服务器运营效率。硬盘是故障率最高的部件之一,在实现存储池化技术后,多盘存储资源池为单体硬盘提供了很好的冗余设计能力。当单个硬盘出现故障后,可以及时使用其他硬盘资源进行无损恢复,无需立即现场更换硬盘

2019-03-09_15-31-46.jpg

虚拟化技术

虚拟化技术和云服务都是基于虚拟化技术,将单个服务器硬件虚拟成多个虚拟机VM,其目的也是在于提高服务器资源的利用率

2019-03-09_15-37-06.jpg

事件驱动开发

Event loop /Event driven development
我们想象现实生活中的例子,
以前去肯德基买吃的,需要排很长的队,排队的时候你只能干等着,啥也不能干。
比如你不能去上洗手间,你不能去买汽车票,你甚至不能确定你想买的东西还有没有。

现在像肯德基这种地方都安装了自动下单的物理设备,你可以自己下单买什么,然后去干别的事情。
快到你的时候,你的手机会收到提醒,然后你就直接去取餐了。

这两个场景最大的区别是什么?
前者是主动的,
后者是被动的,你会收到提醒。后者就是事件驱动的。

例子-支付成功回调

比如我们网上购物,支付订单时会跳转到第三方支付系统(比如支付宝),支付成功之后,
支付成功之后,第三方支付系统(比如支付宝)会给业务系统发送消息通知,业务系统受到通知之后,就会进行处理,比如修改订单状态,发出发货提醒等。

比如我们去食堂吃饭,如果刷工卡,刷卡成功之后,工作人员会及时从刷卡设备看到通知,就知道支付成功了,就不用找我们确认了。-- 事件驱动
如果使用手机去支付,工作人员会过一会问你下有没有支付成功,还要看你的手机界面。-- 轮询

java swing

在 java swing 中,每个界面元素(按钮,下拉框,输入框),都会绑定一个回调事件,当用户事件(例如单击,输入)发生时,系统会自动调用绑定的回调事件。
2019-03-14_08-57-53.jpg

设计态(开发态)-->用户态-->自治

现在有一种趋势:很多以前需要专业人员来操作的东西,现在普通人也可以操作。
比如20年前,一个内容发布系统里面的文章是需要网页编程人员来发布的,可能还需要编写 HTML,调样式,
但是现在我们不用会编程,也可以随便发表博客,比如在 简书,知乎 上发表文章。

很多公司,特别是大公司,致力于把软件开发过程中的某个环节,由开发态转化为用户态。
比如公司团队开发了通过拖拽(不用编写代码)就可以生成 HTML 页面的平台,这样非网页开发人员(比如后端)就可以自己开发网页了。

再比如Google blocky,全程用户态。

生成源代码的步骤

2019-03-03_18-00-23.jpg
其中"编译",类似于我们大学课程中的编译原理。
"代码自动优化":对生成的代码进行优化,比如把
if ((amout == 100)) 优化为 if (amout == 100) ,当然也有其他更复杂的优化。

模仿 Blockly 的代码生成

Google Blockly 是一款基于Web的、开源的、可视化程序编辑器。你可以通过拖拽块的形式快速构建程序,而这些所拖拽的每个块就是组成程序的基本单元。可视化编程完成,Blockly 直接支持 JavaScript、Python、PHP、Lua、Dart 语言源码的导出。此外,还可以将 Blockly 编辑器快速集成到Web、Android或iOS环境中。
2019-03-03_15-15-16.jpg
下面是参考Blockly 的 java 项目

界面操作(动画)
visaul_program_blocky.gif
最终界面
2019-03-03_17-45-32.jpg

保存生成的 json 格式
json_generate_code.jpg

解析
2019-03-03_15-28-55.jpg

生成的代码
2019-03-03_17-48-05.jpg

代码生成工具
2019-03-03_17-53-34.jpg

对应的界面元素
2019-03-03_13-14-37.jpg

说明

代码生成的过程远比上述过程复杂,比如涉及到编译原理,抽象语法树 AST,代码优化等

参考

https://github.com/google/blockly/wiki

https://developers.google.com/blockly/guides/overview

https://developers.google.com/blockly/

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
[软考考点解析]软件设计师--计算机常用端口号
1. 题目 若1台服务器只开放了25和110端口,则该服务器可提供____服务。 A email B WEB C DNS D FTP
3 0
大数据研究常用软件工具与应用场景
如今,大数据日益成为研究行业的重要研究目标。面对其高数据量、多维度与异构化的特点,以及分析方法思路的扩展,传统统计工具已经难以应对。 工欲善其事,必先利其器。众多新的软件分析工具作为深入大数据洞察研究的重要助力, 也成为数据科学家所必须掌握的知识技能。 然而,现实情况的复杂性决定了并不存在解决一切问题的终极工具。实际研究过程中,需要根据实际情况灵活选择最合适的工具(甚至多种
1745 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4620 0
常用软件工具
常用软件工具 一.安装包工具:Inno Setup5 笔者安装的是:Inno Setup 5.exe (Inno Setup 5.2.3 增强版 (build:090822) Setup) 二.源代码编辑器:Source Insight 三.终端仿真器:SecureCRT5.
637 0
SSIS常用的包—执行程序包任务
  执行程序包任务Execute Package task可以从当前package中执行子程序包中的一个package,在SQL Server 2000 DTS中这中任务是不存在的。在图3-16中你可以看到package标签下的ExecuteOutofProcess属性,将它设置为true,它将执行子过程中的任务。
565 0
Win软件私家珍藏-常用软件工具使用总结
原文:Win软件私家珍藏-常用软件工具使用总结 Windowns常用软件 看图 FastStoneImageViewer 免费软件,好用到爆!没广告!功能齐全!不光能看图,还能修图! Picasa3 谷歌家的图片管理软件 文件搜索 Listary 小众软件介绍,超...
1230 0
今天不谈技术,说说一些常用的软件~By 逆天
前端工具:http://www.cnblogs.com/dunitian/p/5640147.html    在线办公: http://word.baidu.com/welcome.html http://codepen.
1035 0
SSIS常用的包—脚本和组件任务
脚本任务允许利用Microsoft Visual Studio环境来使用VB.NET语言创建和执行脚本。ActiveX任务允许从SQL Server 2000中执行脚本。与ActiveX任务相比,脚本任务有一些优点。
651 0
+关注
黄威的世界
我是一个热衷IT技术的人,希望自己不断地设计开发出对别人非常有用的软件。有近7年的java开发经验(包括2年Android开发经验)和一年左右的linux使用经验。擅长Java Web后台开发 ,喜欢研究新的各种实用技术
668
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载