并发编程
文章平均质量分 81
dragonboa
这个作者很懒,什么都没留下…
展开
-
探索并发编程(六)------Java多线程性能优化
大家使用多线程无非是为了提高性能,但如果多线程使用不当,不但性能提升不明显,而且会使得资源消耗更大。下面列举一下可能会造成多线程性能问题的点: 死锁过多串行化过多锁竞争切换上下文内存同步 下面分别解析以上性能隐患 死锁 关于死锁,我们在学习操作系统的时候就知道它产生的原因和危害,这里就不从原理上去累述了,可以从下面的代码和图示重温一下死锁产生的原因: public cl转载 2015-04-30 14:45:21 · 408 阅读 · 0 评论 -
探索并发编程(七)------分布式环境中并发问题
在分布式环境中,处理并发问题就没办法通过操作系统和JVM的工具来解决,那么在分布式环境中,可以采取一下策略和方式来处理: 避免并发时间戳串行化数据库行锁统一触发途径 避免并发 在分布式环境中,如果存在并发问题,那么很难通过技术去解决,或者解决的代价很大,所以我们首先要想想是不是可以通过某些策略和业务设计来避免并发。比如通过合理的时间调度,避开共享资源的存取冲突。另外,在并行任务设计上可转载 2015-04-30 14:48:16 · 343 阅读 · 0 评论 -
探索并发编程(四)------Java并发工具
基于线程安全的一些原则来编程当然可以避免并发问题,但不是所有人都能写出高质量的线程安全的代码,并且如果代码里到处都是线程安全的控制也极大地影响了代码可读性和可维护性。因此,Java平台为了解决这个问题,提供了很多线程安全的类和并发工具,通过这些类和工具就能更简便地写线程安全的代码。归纳一下有以下几种: 同步容器类并发容器类生产者和消费者模式 阻塞和可中断方法Synchronizer 这些类转载 2015-04-30 14:38:41 · 346 阅读 · 0 评论 -
探索并发编程(三)------Java存储模型和共享对象
很多程序员对一个共享变量初始化要注意可见性和安全发布(安全地构建一个对象,并其他线程能正确访问)等问题不是很理解,认为Java是一个屏蔽内存细节的平台,连对象回收都不需要关心,因此谈到可见性和安全发布大多不知所云。其实关键在于对Java存储模型,可见性和安全发布的问题是起源于Java的存储结构。 Java存储模型原理 有很多书和文章都讲解过Java存储模型,其中一个图很清晰地说明了其存储结构转载 2015-04-30 14:36:00 · 312 阅读 · 0 评论 -
构建高并发高可用的电商平台架构实践
一、 设计理念 1. 空间换时间 1) 多级缓存,静态化 客户端页面缓存(http header中包含Expires/Cache of Control,last modified(304,server不返回body,客户端可以继续用cache,减少流量),ETag) 反向代理缓存 应用端的缓存(memcache) 内存数据库 Buffer、ca转载 2015-04-30 14:27:28 · 644 阅读 · 0 评论 -
徐汉彬:Web系统大规模并发——电商秒杀与抢购
摘要:电商的秒杀和抢购,从技术的角度来说,会对Web系统产生巨大的考验。本期《问底》,徐汉彬将带大家关注秒杀和抢购的技术实现和优化,同时,从技术层面揭开,为什么我们总是不容易抢到火车票的原因。 【导读】徐汉彬曾在阿里巴巴和腾讯从事4年多的技术研发工作,负责过日请求量过亿的Web系统升级与重构,目前在小满科技创业,从事SaaS服务技术建设。 电商的秒杀和抢购,对我们来转载 2015-04-30 11:11:57 · 459 阅读 · 0 评论 -
探索并发编程(一)------操作系统篇
在多线程、多处理器甚至是分布式环境的编程时代,并发是一个不可回避的问题,很多程序员一碰到并发二字头皮就发麻,也包括我。既然并发问题摆在面前一个到无法回避的坎,倒不如拥抱它,把它搞清楚,决心花一定的时间从操作系统底层原理到Java的基础编程再到分布式环境等几个方面深入探索并发问题。先就从原理开始吧。 并发产生的原因 虽然从直观效果上,处理器是并行处理多项任务,但本质上一个处理器在某个时间点只能转载 2015-04-30 14:34:25 · 340 阅读 · 0 评论 -
Java创建线程安全的方法
首先来看一个问题: 下面这个方法是线程安全的吗?如何才能让这个方法变成线程安全的? 1 public class MyCount { 2 private static int counter = 0; 3 4 public static转载 2015-04-30 14:20:00 · 409 阅读 · 0 评论 -
Java并发性和多线程介绍
在过去单CPU时代,单任务在一个时间点只能执行单一程序。之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程。虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个CPU,并交由操作系统来完成多任务间对CPU的运行切换,以使得每个任务都有机会获得一定的时间片运行。 随着多任务对软件开发者带来的新挑战,程序不在能假设独占所有的CPU时间、所有的内存和其他计算机资源。一个好的程转载 2015-04-30 14:21:58 · 368 阅读 · 0 评论 -
Yao Yu:谈Twitter的百TB级Redis缓存实践
摘要:在Twitter工作的数年时间,Yao见证了缓存服务的扩展之路——从1个项目到上百项目的使用。为了支撑如此庞大的缓存体系,Twitter使用了成千上万台服务器,多个集群,以及过百TB内存。 【编者按】文章内容是HighScalability创始人Todd Hoff基于Twitter工程师Yao Yu “Scaling Redis at Twitter”演讲的总结。在演讲中,Yao从转载 2015-04-30 11:14:27 · 721 阅读 · 0 评论 -
探索并发编程(五)------Java多线程开发技巧
很多开发者谈到Java多线程开发,仅仅停留在new Thread(...).start()或直接使用Executor框架这个层面,对于线程的管理和控制却不够深入,通过读《Java并发编程实践》了解到了很多不为我知但又非常重要的细节,今日整理如下。 不应用线程池的缺点 有些开发者图省事,遇到需要多线程处理的地方,直接new Thread(...).start(),对于一般场景是没问题的,但如果转载 2015-04-30 14:41:52 · 339 阅读 · 0 评论 -
探索并发编程(二)------写线程安全的Java代码
在写Java程序的时候,何时需要进行并发控制,关键在于判断这段程序或这个类是否是线程安全的。 当多个线程访问一个类时,如果不用考虑这些线程在运行时环境下的调度和交替执行,并且不需要额外的同步,这个类的行为仍然是正确的,那么称这个类是线程安全的。我们设计类就是要在有潜在并发问题存在情况下,设计线程安全的类。线程安全的类可以通过以下手段来满足: 不跨线程共享变量使状态变量为不可变的在任何访问状转载 2015-04-30 14:35:54 · 278 阅读 · 0 评论 -
徐汉彬:高并发Web服务的演变——节约系统内存和CPU
摘要:现在的Web系统面对的并发连接数在近几年呈现指数增长,高并发成为了一种常态,给Web系统带来不小的挑战。一味地通过增加机器来解决并发量的增长,成本是非常高昂的。结合技术优化方案,才是更有效的解决方法。 【导读】 徐汉彬曾在阿里巴巴和腾讯从事4年多的技术研发工作,负责过日请求量过亿的Web系统升级与重构,目前在小满科技创业,从事SaaS服务技术建设。 一、越来越转载 2015-04-30 13:57:33 · 461 阅读 · 0 评论