关系逻辑

并发与并行的区别 The differences between Concurrency and Parallel

本小妞迷上赌 提交于 2020-01-04 04:49:31
逻辑控制流 在程序加载到内存并执行的时候(进程),操作系统会通过让它和其他进程分时段占用CPU(CPU slices)让它产生自己独占CPU的假象(同时通过虚拟内存让它产生独占内存的假象)。 在CPU在执行一个进程的指令时,被执行的许多指令连接起来(也可以理解为程序计数器PC的变化)就构成了“逻辑控制流”。 逻辑控制流的概念也不局限于进程,它在异常处理程序、线程、Java进程中均有体现。而“并发(concurrency)”和”并行(parallel)“都是对逻辑控制流而言的。 并发 当两个逻辑控制流交替执行的时候,我们就称它们是”并发(concurrency)“的。更确切的说,对于逻辑控制流A、B,如果B被执行晚于A被执行的开始且早于A被执行的结束,那么A和B就是并发的。例如下图: 其中A和B是并发的,因为B的执行晚于A的开始且早于A的结束。但是B和C就不是并发的,因为C的执行并没有早于B的结束。同理A和C是并发的。 注意到并发和cpu的个数或者计算机的个数是没有关系的 ,只要两个逻辑流满足上面的关系我们就称它们并发。 并行 如果两个逻辑控制流同时(一个cpu时段内)在不同的cpu(多核)或者计算机上被执行,我们就称其为并行。 例如下图: 其中A和C、B和D之间就是并行执行的。 注意到并行要求具有多个处理核心。 另外,我在网上看到一组很有意思的漫画,讲解了并发和并行的区别,分享一下

从徐飞的文章《Web应用的组件化开发(一)中窥视web应用开发的历史

a 夏天 提交于 2020-01-04 03:19:35
Web应用的组件化开发(一) 原文来自 徐飞 基本思路 1. 为什么要做组件化? 无论前端也好,后端也好,都是整个软件体系的一部分。软件产品也是产品,它的研发过程也必然是有其目的。绝大多数软件产品是追逐利润的,在产品目标确定的情况下,成本有两个途径来优化:减少部署成本,提高开发效率。 减少部署成本的方面,业界研究得非常多,比如近几年很流行的“去IOE”,就是很典型的,从一些费用较高的高性能产品迁移到开源的易替换的产品集群,又比如使用Linux + Mono来部署.net应用,避开Windows Server的费用。 提高开发效率这方面,业界研究得更多,主要途径有两点:加快开发速度,减少变更代价。怎样才能加快开发速度呢?如果我们的开发不是重新造轮子,而是 每一次做新产品都可以利用已有的东西,那就会好很多。怎样才能减少变更代价呢?如果我们能够理清模块之间的关系,合理分层,每次变更只需要修改其中某个部 分,甚至不需要修改代码,仅仅是改变配置就可以,那就更好了。 我们先不看软件行业,来看一下制造行业,比如汽车制造业,他们是怎么造汽车的呢?造汽车之前,先设计,把整个汽车分解为不同部件,比如轮子,引擎,车门, 座椅等等,分别生产,最后再组装,所以它的制造过程可以较快。如果一辆汽车轮胎被扎破了,需要送去维修,维修的人也没有在每个地方都修一下,而是只把轮胎 拆下来修修就好了

架构 MVC MVP MVVM 简介 MD

北城以北 提交于 2020-01-04 00:19:17
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina.com 目录 目录 MVC 架构 MVC各层的作用 Android中的实际情况 演示案例 BaseModel Callback SampleModel SampleActivity 案例总结 MVP 架构 基本概念 特点 MVP各层的作用 用MVP架构编写登录模块完整版 定义Presenter接口(可选) 定义Model接口(可选)及MP回调接口(必选) 定义View接口(必选) 定义Presenter的实现类 定义Model的实现类 让Activity实现View接口 用MVP架构编写登录模块简洁版 View层接口 Activity Presenter Model MVVM 架构 如何选择 MVC 架构 MVC各层的作用 M层:Model,SQL、XML、JSON,数据模型。负责与数据处理相关的业务逻辑的处理,比如数据库读写操作,网络请求操作,复杂的算法,耗时的任务等。Model是一个应用系统的核心部分,代表了该系统实际要实现的所有功能。当M层完成数据处理后,会通知Controller更新View。 V层:View,XML布局、自定义View,Java编写的View

腾讯云专家工程师首次揭秘下一代虚拟网络架构

一曲冷凌霜 提交于 2020-01-04 00:03:29
导读:5G的商用以及IoT、AI等技术的成熟推动着云技术的发展。无时不刻产生的数据洪流,对云的网络架构和处理数据的能力提出了新的需求,为了满足这些需求,下一代虚拟网络技术路在何方?在探讨这个问题之前,我们以腾讯云数据中心网络为例,介绍一下它的技术发展脉络。 一、腾讯云数据中心网络的技术发展脉络 1. 从千兆到万兆: 2014年,腾讯公有云服务器接入带宽从千兆迈入了万兆。 2. 从万兆到25G: 2017年,腾讯公有云服务器接入带宽从万兆向25G转变,这种转变主要来自于业务对 网络吞吐 的性能诉求。 3. 从25G到50-100G: 未来的1~2年,公有云服务器接入带宽将全面向100G转变。 高密计算 (单台虚拟化服务器的CPU核数越来越多) 、高密存储 (单台存储服务器的盘数和磁盘容量越来越高)、 AI、HPC 的发展,对网络的高吞吐和低延迟提出了更高要求。 不同的服务器接入带宽,对虚拟化网络的架构和扩展性会提出不一样的要求。在100G的网络时代,虚拟化网络架构会是怎样的? 二、腾讯云100G时代下的VPC架构剖析 1.宿主机vSwitch能力 云网络发展早期, 网络虚拟化的vSwitch通常使用内核模块来实现, 基于netfilter的钩子定制encap/decap/安全组/qos等逻辑,快速满足业务要求。但是 基于内核实现的vSwitch有几个问题: (1

科学●哲学●艺术●恶搞

痞子三分冷 提交于 2020-01-03 02:34:22
一直以来,我都想找机会谈一下这些概念的关系。正好最近参加了一个团队管理学的培训,课程当中有老师谈到这样一个话题:管理这门学科究竟是属于科学,还是属于艺术。那我们就以此为线索,讨论一下这些概念。 科学有一个很明显的特点,科学的结论可以用实验来证明,并能用数字量化。科学有着极强的逻辑性,当达到一定条件时,就会导致必然的结果。水烧到100度就会沸腾,温度降到0度就会结冰,用中子轰击铀235就会发生核裂变,这些都是科学。 当管理学引入统计学以后,就有了一些科学的特征。以前我曾经看过一个统计理论,认为一个管理者最好只有不超过5名直接下属,如果多于这个数字,管理工作就会出现问题。 哲学与科学有一个很大的相似之处,就是它们都具有很强的逻辑性,不同的是,哲学的逻辑无法用实验证实,只能通过推理来证明,而且一般不用数字量化,更多是在说明一种道理,从而影响人对事物得看法,潜移默化的影响人的行为。“君子之交淡如水”、“一、妻子永远正确;二、如果不正确,请参考第一条”,这些是友情与爱情的哲学观点,是从很多人的现实生活中抽象推理而来,并非来自于实验室。 管理学中也有类似的哲学观点,比如管理工作的几个基本原则:“仔细聆听、善意回应;维护自尊、加强自信;给与支持、鼓励承担”等等。这些都是在告诉管理者,要想做得更好,应该这样去做。 再来谈艺术。艺术和科学、哲学相比,其逻辑性大大降低,或者说,艺术都是逻辑混乱的

Java常见开发规范

倖福魔咒の 提交于 2020-01-03 01:07:56
1 背景概述 作为程序员大军中的一员,笔者工作于沈阳数通畅联软件技术有限公司。在任职工作的第一天就听领导强调开发规范的重要性,但是笔者心里还想为什么开发规范是最重要的,难道是不应该是实现功能就万事大吉了? 随着时间的推移,笔者也经历了几个软件项目,越来越意识到开发规范的重要。今天笔者将自己的所听、所学以及个人的总结汇总出来与大家分享,希望可以为大家提供帮助。 2 目的意义 在团队协作开发的情况下,一套鲜明的编程风格,可以让协作者、后继者和自己一目了然,在很短的时间内看清程序的结构,理解设计的思路。提高代码的可读性、可重用性、程序健壮性、可移植性和可维护性。制定开发规范的目的是为了提高软件开发效率及所开发的软件的可维护性,提高软件的质量。通过开发规范的约束提升自身的逻辑思维能力,也侧面的提升个人编码能力及水平。 3 开发规范 作为软件项目的开发人员而言,对于功能代码,首要的要求是代码必须正确的,能够保证功能是可运行的,并且能够满足客户的需求。第二个的要求是代码必须清晰易懂,方便于其他的程序员能够容易理解代码的原理,增强代码的可读性,保证代码统一一致的编程风格。下面我们通过格式、命名、权限、性能等几个方面来明确开发规范。 3.1 统一格式 整体风格 采用阶梯层次组织程序代码。每层次缩进为4格,括号位于下一行。要求相匹配的大括号在同一列,对下一行同样要再缩进4格。参考代码如下:

深入浅出话命令

﹥>﹥吖頭↗ 提交于 2020-01-02 03:19:36
转自:http://blog.csdn.net/lisenyang/article/details/18312387 WPF为我们准备了完善的命令系统,你可能会问:“有了路由事件为什么还需要命令系统呢?”。事件的作用是发布、传播一些消息,消息传达到了接收者,事件的指令也就算完成了,至于如何响应事件送来的消息事件并不做任何限制,每个接收者可已用自己的行为来响应事件。也就是说,事件不具有约束力。命令和事件的区别就在于命令具有约束力。 的确,在实际编程工作中,即使只用事件不用命令程序的逻辑一样被驱动的很好,但我们不能够阻止程序员按照自己的习惯去编写代码。比如保存事件的处理器,程序员可以写Save()、SaveHandle()、SaveDocument()... 这些都符合代码规范。但迟早有一天整个项目会变的让人无法读懂,新来的程序员或修改bug的程序员会很抓狂。如果使用命令,情况就会好很多----当Save命令到达某个组件的时候,命令会自动去调用组件的Save方法。而这个方法可能定义在基类或者接口里(即保证了这个方法是一定存在的),这就在代码结构和命名上做了约束。不但如此,命令还可控制接收者“先做校验,再保存,最后退出”,也就是说命令除了可以约束代码,还可以约束步骤逻辑,让新来的程序员想犯错都难,也让那个修改Bug的程序员容易找到规律,容易上手。 1.1 命令系统的基本元素和关系

EJB到底是什么?

拈花ヽ惹草 提交于 2020-01-01 23:17:12
1. 我们不禁要问,什么是"服务集群"?什么是"企业级开发"? 既然说了EJB 是为了"服务集群"和"企业级开发",那么,总得说说什么是所谓的"服务集群"和"企业级开发"吧!这个问题其实挺关键的,因为J2EE 中并没有说明白,也没有具体的指标或者事例告诉广大程序员什么时候用EJB 什么时候不用。于是大家都产生一些联想,认为EJB"分布式运算"指得是"负载均衡"提高系统的运行效率。然而,估计很多人都搞错了,这个"服务群集"和"分布式运算"并没有根本解决运行负载的问题,尤其是针对 数据库 的应用系统。 为什么? 我们先把EJB 打回原形给大家来慢慢分析。 2. 把EJB 掰开了揉碎了 我们把EJB 的概念好好的分析一下,看看能发现些什么蛛丝马迹。 3.1 EJB 概念的剖析 我们先看一下,EJB 的官方解释: 商务软件的核心部分是它的业务逻辑。业务逻辑抽象了整个商务过程的流程,并使用计算机语言将他们实现。 …… J2EE 对于这个问题的处理方法是将业务逻辑从客户端软件中抽取出来,封装在一个组件中。这个组件运行在一个独立的服务器上,客户端软件通过网络调用组件提供的服务以实现业务逻辑,而客户端软件的功能单纯到只负责发送调用请求和显示处理结果。在J2EE 中,这个运行在一个独立的服务器上,并封装了业务逻辑的组件就是EJB(Enterprise Java Bean)组件

java菜单的逻辑处理

陌路散爱 提交于 2020-01-01 02:13:51
1.目的:一个网站的菜单实现,存在多级关系,返回一个多级的树状结构,供前端使用。 2.整体思路 a.将所有对象查回来作为一个列表然后对他树状进行处理 b.通过vo类直接返回个树状结构 两者达成的效果一样,只是实现的地方不同 3.实现 a。根据常规场景生成一个菜单表(mysql) CREATE TABLE ` menu ` ( ` menu_id ` bigint ( 20 ) NOT NULL AUTO_INCREMENT COMMENT '菜单id' , ` menu_name ` varchar ( 20 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '菜单名称' , ` menu_path ` varchar ( 20 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '菜单路径' , ` menu_level ` bigint ( 20 ) DEFAULT NULL COMMENT '菜单等级' , ` parent_id ` bigint ( 20 ) DEFAULT NULL COMMENT '父id' , ` menu_title ` varchar ( 30 )

区块链研究实验室|基于Substrate实现比特币UTXO支付模型

狂风中的少年 提交于 2019-12-31 21:30:44
前段时间,Gavin Wood要求我研究基于Substrate实施UTXO链的可能性,Substrate是目前最有前景的区块链技术底层架构,而且目前Polkadot是基于substrate进行开发的。 我们想知道Substrate的灵活性,而UTXO链似乎是进行测试的一个不错的选择,因为它与我们过去在实施Substrate时所考虑的完全不同。如果可行,则表明Substrate确实非常灵活且通用。我们可以更有信心,把Substrate应该到不同领域的区块链项目中。 与以太坊类似,Substrate保留一定数量的可用资金。从某种意义上讲,它类似于普通的银行系统,其中帐户余额用数字表示,并存储在数据库或计算机内存中的某个位置。 从历史上看,第一个成功的加密货币是比特币,它使用完全不同的方法。在比特币中,本身没有账户,余额也不是作为一个数字存储的。取而代之的是,可用资金是根据一组所谓的未用交易输出来定义的,简称为UTXO,这是一个非常简单的主意。 简而言之是UTXO 简而言之,UTXO非常类似于现金,或者更确切地说,是旅行支票。 当你用现金支付某人时,你通常会想到要支付的总价值,但是你用一组独特的、不可分割的单位(代币或钞票)来表示这个价值。例如如果Alice希望付给Bob$250美元,她可以给Bob2张价值$100美元的钞票和1张价值50美元的钞票,或五张面值$50的钞票