会员
周边
新闻
博问
闪存
众包
赞助商
Chat2DB
所有博客
当前博客
我的博客
我的园子
账号设置
会员中心
简洁模式
...
退出登录
注册
登录
Hello...world
博客园
首页
新随笔
联系
订阅
管理
2019年6月28日
Java线程之CompletionService
摘要: 背景 当我们需要同时处理一批任务时,并需要在任务完成时,可以获得任务的结果时,我们该怎么办呢。 第一种方案是:保存每一个任务关联的Future,然后主线程遍历每一个Future进行get,由于get会阻塞,我们只能设置timeot为0,但是这样会有比较大的性能消耗。 第二种方案:使用阻塞队列,每一个
阅读全文
posted @ 2019-06-28 23:39 Hello...my...world
阅读(191)
评论(0)
推荐(0)
2019年6月21日
记录一次缓存系统的优化过程
摘要: 系统介绍: 之前线上跑着一个索引系统,该索引系统主要功能将数据库的数据取出来构建成一个大的反向索引对象,存储在本地cache中,然后供业务方进行查询使用。该系统主要分为两大模块,一个为controller,一个为server。controller主要负责数据的更新操作,当数据更新后,广播消息通知se
阅读全文
posted @ 2019-06-21 22:46 Hello...my...world
阅读(238)
评论(0)
推荐(0)
2019年6月10日
并发编程-互斥锁:解决原子性问题
摘要: 背景 我们把多个操作在cpu执行中不被中断的特性叫原子性。而cpu的切换却是发生在cpu指令级别的,所以线程的切换造成了原子性问题。那么如果我们禁止cpu切换是否可行呢?答案是不行,因为在多核的情况下,如果有两个cpu线程同一时刻操作同一个变量,即使不发生线程切换,每个cpu各自执行也会发生错误(如
阅读全文
posted @ 2019-06-10 00:44 Hello...my...world
阅读(350)
评论(0)
推荐(0)
2019年6月8日
并发编程-Java内存模型:解决可见性与有序性问题
摘要: 背景 我们知道导致cpu缓存导致了可见性问题,编译器优化带来了有序性问题。那么如果我们禁用了cpu缓存与编译器优化,就能够解决问题,但是性能就无法提升了。所以一个合理的方案,就是按照一定规范来禁用缓存和编译器优化,即在某些情况下禁用缓存与编译器优化。Java内存模型就是这样的一个规范,用来解决可见性
阅读全文
posted @ 2019-06-08 23:05 Hello...my...world
阅读(250)
评论(0)
推荐(0)
并发编程-可见性、顺序性、原子性
摘要: 一直以来,由于cpu、内存、I/O存在着巨大的速度差异,cpu>内存>I/O。为了平衡这三者的差异,计算机结构、操作系统、编译器都做出了巨大的贡献,主要体现为: 1. 增加cpu缓存,以均衡与内存的速度差异 2. 编译器优化指令执行次序,使得缓存能够更加合理利用 3. 操作系统增加进程、线程,以分时
阅读全文
posted @ 2019-06-08 01:50 Hello...my...world
阅读(607)
评论(0)
推荐(0)
2019年6月6日
因打印日志而引发的故障
摘要: 问题描述: 最近已经有两个项目因为日志打印问题而引发了故障,可以说是血的教训了。两次故障的原因也是非常的相似,都是由于其他业务系统调用了另外一个老系统的接口,但是由于传递的参数不正确,而老系统会因为参数不正确而打印日志。当错误的请求量增大,打印日志会造成当前线程阻塞,容易使机器机器负载升高,产生性能
阅读全文
posted @ 2019-06-06 21:43 Hello...my...world
阅读(1763)
评论(0)
推荐(0)
公告