分类目录:并发和多线程

以下是分类 并发和多线程 下的所有文章

乐观锁是否能够防重

今天又一次与同事讨论了乐观锁是否能够防重的问题,每次讨论都是把问题费劲脑汁的想了一遍,那过程真的很费脑细胞,于是做个总结,便于下次不用回忆就能把整个问题想清楚和说清楚。 我们假设有一个场景,我们正在开发一个支付模块,支付模块通过两步骤完成支付请求,第一步骤是支付初始化,第二步骤是支付确认,在支付初……

synchronized和volatile不具有互斥语义

背景 synchronized: 保证内存可见性和互斥性 volatile: 保证内存可见性 问题 synchronized与volatile是否具有互斥性?对于一份数据,写使用了synchronized做同步,读通过volatile修饰,是否能保证数据安全? 答案 不能,但是取决于具体实现 测试1 123456789101112131415161718192021222324252627282930313233343536373839……

Java并发与多线程大总结

Common Concurrent Knowledge 1. LockSupport.park()和unpark(),与object.wait()和notify()的区别? 1). 面向的主体不一样。LockSuport主要是针对Thread进行阻塞处理,可以指定阻塞队列的目标对象,每次可以指定具体的线程唤醒。Object.wait()是以对象为纬度,阻塞当前的线程和唤醒单个(随机)或者所有线程。 2……

【转载】为什么看起来不是很复杂的网站,淘宝、腾讯却需要大量顶尖高手来开发?

作者:知乎-子柳、蔡正海 网址:http://www.zhihu.com/question/20303645 为什么很多看起来不是很复杂的网站,比如 Facebook 需要大量顶尖高手来开发? 子柳: 就拿淘宝来说说,当作给新人一些科普。 ▼先说你看到的页面上,最重要的几个: 【搜索商品】这个功能,如果你有几千条商品,完全可以用select * from tableXX wh……

优雅关机之IO阻塞状态退出

我在另外一篇文章一个框架的线程同步代码引起的思考中讲解了如何对一个后台服务进行优雅关机,并且给出一个示例程序来说明优雅关机的实现细节,后来,有读者提出了一个质疑,质疑在IO阻塞状态下,仅仅interrupt一个线程是不足够让一个线程100%退出的,IO阻塞下的线程只有在阻塞完成,Socket关闭的时候,或者流被关闭的时……

一个框架的线程同步代码引起的思考

最近在review公司的前任架构师留下来的框架代码,其中,有一段代码实现的让人很confused,仔细阅读和分析后,发现可能存在一个隐含的bug,在进行了深入的分析和实践,通过一个简单的程序进行了最小化重现,证明了bug的存在,并且对框架进行改造,改正了这个bug,于是,在这个帖子中记录这个问题的来龙去脉,希望能够帮助……

【转载】大型高并发高负载网站的系统架构剖析

原文出处: 点击这里   前言 鄙人先后在CERNET做过拨号接入,在Yahoo&3721搞过搜索前端,在猫扑处理过mop.com的架构升级,在6.cn视频网站从事开发工作,还在多年的工作中接触和开发过不少大中型网站的模块,因此在大型网站应对高负载和并发的解决方案上有一些积累和经验,希望和大家一起探讨。 一个小型的网站,……

Lock之Condition

今天听人讨论Condition,回来就复习了一下,Condition是一个接口,其中,有两类主要的方法,一类是await相关的,另一类是signal/signalAll相关的,看着是不是很熟悉,是的,和Object.wait, Object.notify/Object.notifyAll很相似。 java.util.concurrent.locks.Condition.await() java.util.concurrent.locks.Conditio……

【转载】Tomcat7连接数异常导致超时问题的排查

原文出处:http://blog.2baxb.me/archives/1309?from=timeline&isappinstalled=0 1.摘要 前几天线上tomcat出了一次诡异的超时问题,在此记录下来。每次问题的排查都很痛苦,而定位原因之后再回想整个过程又常常有“当时如果看了那个其实早就能知道了”之类的懊恼,看来问题排查流程的标准化还有很长的路要走。 2.现象和……

【未完待续】Java后台线上服务优化小记

最近,一直负责开发公司内部的Restful服务框架,并与公司的代码审核和CI上线流程进行整合,整合的过程中需要开发线上Restful服务的启动脚本,于是,发现一些线上的服务配置没有进行过优化,因此,简单的做了下压测,尝试和对比,对线上服务进行了简单的优化,优化过程记录如下: 1. 原先GC堆的大小设置为-Xms128m -Xmx1g,……

【未完待续】电商之商品后台那些事儿

1. 分库分表 2. 如何存储交易快照? 3. 类目,属性,标签等的设计?SKU?SDU? 4. 商品需要下线后才能修改吗?淘宝价格在下单后可以更改订单。 5. 商品使用一个神奇的乐观锁,怎么扣减库存? 不使用悲观锁,也不使用乐观锁,使用:update balance = balance – 1 where balance > 0,成功扣减后会返回更新的条数,如……

【未完待续】后台服务平台建设之日志

作为平台质量管理委员会的一员,在完善CI集成的过程中,参与了平台建设的方方面面的工作,其中的一项就是日志框架等的设计和建设,我之前在微博的时候就总结了一下日志的总类,以及日志对线上服务性能的影响: Tomcat/Java服务器的日志总结 现在,我们讨论的焦点是: 1. 我们线上应该使用什么级别的日志?info还是debug? ……

LMAX的Disruptor的RingBuffer学习笔记

并发queue实现的传统方法 链表:节点分散,不利于cache和批量读取,分配节点需要大量GC,size/head/tail有大量的竞争,存在CPU缓存的伪竞争问题。 数组:size/head/tail一样有大量的竞争,传统方法是在所有的写操作上做互斥,效率低下,这几个字段写在一起存在CPU缓存的伪竞争。 减少竞争点 RingBuffer也是个数组,不过,……

老生常谈双检锁(DCL)

最近作为平台面试组的一员,对面试工作颇有感触,平台面试组出了一套笔试题,笔试题的最后一道题就是非常经典的实现一个线程安全的懒加载单例模式,并且需要候选人考虑效率来实现。 大家会认为,这么老套的一道面试题,是不是太简单了?非也非也,经过几个星期的面试,并且与每个候选人针对此题进行了沟通,能够真正的答……

Continuation, Actor & Coroutine(协程)

本文部分段落来自互联网。 概述 Actor、Coroutine(协程)和Continuation这三个概念由于并发编程的受关注而被经常提到,这里主要想谈下这三者的区别和联系。 首先,Actor和Coroutine在我看来是两种并发模型,仅针对于并发这个领域,而Continuation则是程序设计领域的一个概念,相比于Actor和Coroutine是一个更基础的概念……