(转)服务端高并发架构演进之路_march on-编程思维

以淘宝作为例子,介绍从一百个到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知。推荐阅读   转自 https://segmentfault.com/a/1190000018626163 ,以下为正文 ================================= 1. 概述 本文以淘宝作为例子,介绍从一百个到千万级并发情况下

并行事务会引发什么问题?_有点小白的菜鸟-编程思维

并行事务会引发什么问题? MySQL 服务端是允许多个客户端连接的,这意味着 MySQL 会出现同时处理多个事务的情况。 那么在同时处理多个事务的时候,就可能出现脏读(dirty read)、不可重复读(non-repeatable read)、幻读(phantom read)的问题。 接下来,通过举例子给大家说明,这些问题是如何发生的。 脏读 如果一个事务「读到」了另一个「未提交事务修改过的数

如何解决高并发和大流量_有点小白的菜鸟-编程思维

原文来自:https://developer.aliyun.com/article/658092 本文只供学习记录,如有侵权,联系删除 简介: 名词解释:并发 在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任意一个时刻上只有一个程序在处理机上运行。 名词解释:并发 在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行

系统设计目标(一):如何提升系统性能?_data_monk-编程思维

提到互联网系统设计,你可能听到最多的词儿就是“三高”,也就是“高并发”“高性能”“高可用”,它们是互联网系统架构设计永恒的主题。在前两节课中,我带你了解了高并发系统设计的含义,意义以及分层设计原则,接下来,我想带你整体了解一下高并发系统设计的目标,然后在此基础上,进入我们今天的话题:如何提升系统的性能? 高并发系统设计的三大目标:高性能、高可用、可扩展 高并发,是指运用设计手段让系统能够处理更多

计算机领域的阿姆达尔定律(amdahl’s law)_data_monk-编程思维

计算机领域的阿姆达尔定律(Amdahl’s law)是吉恩·阿姆达尔在 1967 年提出的。它描述了并发进程数与响应时间之间的关系,含义是在固定负载下,并行计算的加速比,也就是并行化之后效率提升情况,可以用下面公式来表示:(Ws + Wp) / (Ws + Wp/s)其中,Ws 表示任务中的串行计算量,Wp 表示任务中的并行计算量,s 表示并行进程数。从这个公式我们可以推导出另外一个公式:1/(

wait与sleep区别_data_monk-编程思维

wait与sleep区别在于: wait会释放所有锁而sleep不会释放锁资源. wait只能在同步方法和同步块中使用,而sleep任何地方都可以. wait无需捕捉异常,而sleep需要. 两者相同点:都会让渡CPU执行时间,等待再次调度! class Allocator { private List<Object> als; // 一次性申请所有资源 synchr

【高并发】从源码角度深度解析线程池是如何实现优雅退出的_冰河团队-编程思维

大家好,我是冰河~~ 在【高并发专题】中,我们从源码角度深度分析了线程池中那些重要的接口和抽象类、深度解析了线程池是如何创建的,ThreadPoolExecutor类有哪些属性和内部类,以及它们对线程池的重要作用。深度分析了线程池的整体核心流程,以及如何拆解Worker线程的执行代码,深度解析Worker线程的执行流程。 本文,我们就来从源码角度深度解析线程池是如何优雅的退出程序的。首先,我们来

节选 软件建模与文档:架构师怎样绘制系统架构蓝图?_data_monk-编程思维

软件建模所谓软件建模,就是为要开发的软件建造模型。模型是对客观存在的抽象,例如著名的物理学公式 E=mc2,就是质量能量转换的物理规律的数学模型。除了物理学公式以外,还有一些东西也是模型,比如地图是对地理空间的建模;机械装置、电子电路、建筑设计的各种图纸是对物理实体的建模。而软件,也可以通过各种图进行建模。软件系统庞大复杂,通过软件建模,我们可以抽象软件系统的主要特征和组成部分,梳理这些关键组成

「冰河技术」部分精华文章目录汇总_冰河团队-编程思维

1.高并发专题 高并发编程一直是程序员比较头疼的事项,它不像那些简单的业务编程,能够快速定位到异常。往往在并发编程中,出现的异常都是比较诡异的,而且并不是每次都会复现。只有掌握了并发编程更深层次的原理和源码分析,才能更好的解决并发编程中出现的问题。 高并发:如何安全的发布对象(含各种单例代码分析) 高并发:线程与多线程 高并发:线程的执行顺序 高并发:深入解析Callable接口 高并发:两种异

【高并发】又一个朋友面试栽在了thread类的stop()方法和interrupt()方法上!_冰河团队-编程思维

写在前面 新一轮的面试已经过去,可能是疫情的原因吧,很多童鞋纷纷留言说今年的面试题难度又提高了,尤其是对并发编程的知识。我细想了下,也许有那么点疫情的原因吧,但无论面试的套路怎么变,只要掌握了核心知识和底层原理,吊打面试官应该不难吧。玩笑归玩笑,学习知识并不只是为了应付面试,更应该将这些知识运用到实际的工作中。 一个工作了几年的朋友今天打电话和我聊天,说前段时间出去面试,面试官问他做过的项目

【高并发】线程的生命周期其实没有我们想象的那么简单!!_冰河团队-编程思维

写在前面 在【高并发专题】中的《高并发之——线程与多线程》一文中,我们简单介绍了线程的生命周期和线程的几个重要状态,并以代码的形式实现了线程是如何进入各个状态的。今天,我们就结合操作系统线程和编程语言线程再次深入探讨线程的生命周期问题,线程的生命周期其实没有我们想象的那么简单!! 理解线程的生命周期本质上理解了生命周期中各个节点的状态转换机制就可以了。 接下来,我们分别就通用线程生命周期和J

【高并发】高并发场景下如何优化加锁方式?看完这篇我确实明白了!!_冰河团队-编程思维

写在前面 很多时候,我们在并发编程中,涉及到加锁操作时,对代码块的加锁操作真的合理吗?还有没有需要优化的地方呢? 前言 在《【高并发】优化加锁方式时竟然死锁了!!》一文中,我们介绍了产生死锁时的四个必要条件,只有四个条件同时具备时才能发生死锁。其中,我们在阻止请求与保持条件时,采用了一次性申请所有的资源的方式。例如在我们完成转账操作的过程中,我们一次性申请账户A和账户B,两个账户都申请成功后

【高并发】高并发分布式锁架构解密,不是所有的锁都是分布式锁!!_冰河团队-编程思维

写在前面 最近,很多小伙伴留言说,在学习高并发编程时,不太明白分布式锁是用来解决什么问题的,还有不少小伙伴甚至连分布式锁是什么都不太明白。明明在生产环境上使用了自己开发的分布式锁,为什么还会出现问题呢?同样的程序,加上分布式锁后,性能差了几个数量级!这又是为什么呢?今天,我们就来说说如何在高并发环境下实现分布式锁,不是所有的锁都是高并发的。 万字长文,带你深入解密高并发环境下的分布式锁架构,不

【高并发】终于弄懂为什么局部变量是线程安全的了!!_冰河团队-编程思维

写在前面 相信很多小伙伴都知道局部变量是线程安全的,那你知道为什么局部变量是线程安全的吗? 前言 多个线程同时访问共享变量时,会导致并发问题。那么,如果将变量放在方法内部,是不是还会存在并发问题呢?如果不存在并发问题,那么为什么不会存在并发问题呢? 著名的斐波那契数列 记得上学的时候,我们都会遇到这样一种题目,打印斐波那契数列。斐波那契数列是这样的一个数列:1、1、2、3、5、8、13、21

高并发之——线程的执行顺序_冰河团队-编程思维

一、线程的执行顺序是不确定的 调用Thread的start()方法启动线程时,线程的执行顺序是不确定的。也就是说,在同一个方法中,连续创建多个线程后,调用线程的start()方法的顺序并不能决定线程的执行顺序。 例如,这里,看一个简单的示例程序,如下所示。 package io.binghe.concurrent.lab03; /** * @author binghe * @versio

高并发之——深入解析callable接口_冰河团队-编程思维

本文纯干货,从源码角度深入解析Callable接口,希望大家踏下心来,打开你的IDE,跟着文章看源码,相信你一定收获不小。 1.Callable接口介绍 Callable接口是JDK1.5新增的泛型接口,在JDK1.8中,被声明为函数式接口,如下所示。 @FunctionalInterface public interface Callable<V> { V call()

高并发之——不得不说的线程池与threadpoolexecutor类浅析_冰河团队-编程思维

一、抛砖引玉 既然Java中支持以多线程的方式来执行相应的任务,但为什么在JDK1.5中又提供了线程池技术呢?这个问题大家自行脑补,多动脑,肯定没坏处,哈哈哈。。。 说起Java中的线程池技术,在很多框架和异步处理中间件中都有涉及,而且性能经受起了长久的考验。可以这样说,Java的线程池技术是Java最核心的技术之一,在Java的高并发领域中,Java的线程池技术是一个永远绕不开的话题。既然Ja

高并发之——从源码角度分析创建线程池究竟有哪些方式_冰河团队-编程思维

前言 在Java的高并发领域,线程池一直是一个绕不开的话题。有些童鞋一直在使用线程池,但是,对于如何创建线程池仅仅停留在使用Executors工具类的方式,那么,创建线程池究竟存在哪几种方式呢?就让我们一起从创建线程池的源码来深入分析究竟有哪些方式可以创建线程池。 使用Executors工具类创建线程池 在创建线程池时,初学者用的最多的就是Executors 这个工具类,而使用这个工具类创建线程