互斥锁:解决原子性问题/保护共享资源-编程思维

原子性 原子性:一个或多个操作在CPU执行的过程中不被中断的特性 原子性问题源头是线程切换,保证对共享变量的修改时互斥的,就可以保障原子性。 简易锁模型 临界区:一段需要互斥执行的代码 改进锁模型 明确锁的范围,能够锁住的资源。 简易锁模型容易出问题的地方: 1、锁住了错误的资源 2、锁的粒度太大,锁住的资源太多,导致性能太低 synchronized关键字 class X { //

安全性、活跃性以及性能问题-编程思维

安全性 并发bug三大源头 源头 原子性问题 可见性问题 有序性问题 bug风险点 存在共享数据并且该数据会发生变化(即多个线程会同时读写同一数据) 分类 数据竞争 当多个线程同时访问同一数据,并且至少有一个线程会写这个数据。 假设 count=0,当两个线程同时执行 get() 方法时,get() 方法会返回相同的值 0,两个线程执行 get()+1 操作,结果都是 1,之后两个线程再

并发编程bug源头-编程思维

背景 核心矛盾 CPU/内存/IO设备的速度差异 解决思路 计算机体系结构——CPU 增加了缓存,以均衡与内存的速度差异 操作系统——操作系统增加了进程、线程,以分时复用 CPU,进而均衡 CPU 与 I/O 设备的速度差异 编译程序——编译程序优化指令执行次序,使得缓存能够得到更加合理地利用 异常根源 天下没有免费的午餐,并发程序很多诡异问题的根源也对应着上述解决思路。 cpu缓存导致的可

线程池子线程的终止shutdown()、shutdownnow()-编程思维

背景 之前某需求在触发流控时需要中断ExcutorService中的子线程,发现无论Shutdown、ShutdownNow方法都无法直接停止子线程,今天看到线程的interrupt()方法才了解如何停止。 stop() 和 interrupt() stop方法 stop() 方法会真的杀死线程,不给线程喘息的机会,如果线程持有 ReentrantLock 锁,被 stop() 的线程并不会自动

五个月,秒杀,38个大的篇章,126+篇文章、视频、小册,150+源码分支,完美收官!-编程思维

大家好,我是冰河~~ 经过四个多月的坚持,《Seckill秒杀系统》终于接近尾声了,也感谢大家这四个多月以来的坚持和陪伴,也相信大家在《Seckill秒杀系统》专栏中,学到了不少知识和技术。接下来,我们就一起对《Seckill秒杀系统》专栏做个总结。 一、总体概述 在《Seckill秒杀系统》专栏中,不仅仅是带着大家从零开始写一个秒杀业务系统,而是从需求立项到架构设计、环境搭建到编码实现、问题重

【高并发】aqs中的countdownlatch、semaphore与cyclicbarrier用法总结-编程思维

CountDownLatch 概述 同步辅助类,通过它可以阻塞当前线程。也就是说,能够实现一个线程或者多个线程一直等待,直到其他线程执行的操作完成。使用一个给定的计数器进行初始化,该计数器的操作是原子操作,即同时只能有一个线程操作该计数器。 调用该类await()方法的线程会一直阻塞,直到其他线程调用该类的countDown()方法,使当前计数器的值变为0为止。每次调用该类的countDown(

仿文:普通人或者门外汉该怎样入门编程?-编程思维

继我关注很久一位编程的大牛发布了他的那篇文章—— <探究:普通人都是怎么入门编程> https://www.cnblogs.com/liuyangfirst/p/16991386.html 我先去再相关评论里看到了有人说这是AI写的一样,不过我对这篇文章的作者稍微有些了解,可能就是他写的,因为有时候你看不透——他的心,就像洋葱的芯,你需要一层一层地剥开。 继他在某个wechat gr

iis 之 连接数、并发连接数、最大并发工作线程数、队列长度、最大工作进程数-编程思维

http://t.zoukankan.com/l1pe1-p-7742936.html 一、IIS连接数   一般购买过虚拟主机的朋友都熟悉购买时,会限制IIS连接数,顾名思义即为IIS服务器可以同时容纳客户请求的最高连接数,准确的说应该叫“IIS限制连接数”。   客户请求的连接内容包括:   [1] 网站html请求,html中的图片资源,html中的脚本资源,其他需要连接下载的资源等等,任

(转)服务端高并发架构演进之路_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()方法上!_冰河团队-编程思维

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