Concurrency
文章平均质量分 71
dm_vincent
这个作者很懒,什么都没留下…
展开
-
[Java 并发] Java并发编程实践 思维导图 - 第二章 线程安全性
根据《Java并发编程实践》一书整理的思维导图。原创 2014-11-09 11:25:08 · 5324 阅读 · 0 评论 -
MCS锁的原理和实现
前情回顾上一篇文章中主要讨论了自旋锁的特点和其适用场景,然后给出了两种自旋锁的简单实现。存在的问题无论是简单的非公平自旋锁还是公平的基于排队的自旋锁,由于执行线程均在同一个共享变量上自旋,申请和释放锁的时候必须对该共享变量进行修改,这将导致所有参与排队自旋锁操作的处理器的缓存变得无效。如果排队自旋锁竞争比较激烈的话,频繁的缓存同步操作会导致繁重的系统总线和内存的流量,从而大大降低了...原创 2018-04-01 22:51:47 · 5343 阅读 · 5 评论 -
CLH锁的原理和实现
前情回顾上一篇文章中主要讨论了MCS自旋锁的特点和其适用场景,并分析了其原理和实现细节。MCS锁存在的问题MCS锁解决了简单自旋锁的一个最大痛点:频繁地缓存同步操作会导致繁重的系统总线和内存的流量,从而大大降低了系统整体的性能。解决这个问题的思路是将自旋操作限制在一个本地变量上,从而在根本上避免了频繁地多CPU之间的缓存同步。但是MCS锁的实现并不简单,需要注意的事项主要有以下...原创 2018-04-07 16:12:17 · 8602 阅读 · 3 评论 -
简单的非公平自旋锁以及基于排队的公平自旋锁的实现
基础什么是自旋锁由于本文主要讨论的都是自旋锁,所以首先就需要弄明白什么是自旋锁。自旋锁最大的特征,就是它会一直循环检测锁的状态,当锁处于被占用的状态时,不会将当前线程阻塞住,而是任由它继续消耗CPU Cycles,直到发现需要的锁处于可用状态。有了这一层了解,自旋锁的优势和劣势,以及其适用场景也就一目了然了。优势:没有线程阻塞,也就没有了线程上下文切换带来的开销...原创 2018-03-24 14:47:52 · 1588 阅读 · 0 评论 -
为什么volatile++不是原子性的?
问题在讨论原子性操作时,我们经常会听到一个说法:任意单个volatile变量的读写具有原子性,但是volatile++这种操作除外。所以问题就是:为什么volatile++不是原子性的?答案因为它实际上是三个操作组成的一个符合操作。首先获取volatile变量的值将该变量的值加1将该volatile变量的值写会到对应的主存地址一个很简单的例子:如果两个线程在...原创 2018-03-18 21:23:19 · 10677 阅读 · 9 评论 -
[AOP] 4. Spring AOP中提供的种种Aspects - 异步执行
上一篇文章介绍了Spring AOP中提供的种种与Tracing相关的Aspects,还剩两个Aspects没有讨论:AsyncExecutionInterceptorConcurrencyThrottleInterceptor本文继续探讨和异步与并发相关一个Aspect,也是使用的比较普遍的一个:AsyncExecutionInterceptor在下篇文章中会继续讨论Concurrenc原创 2017-03-19 15:52:39 · 8003 阅读 · 0 评论 -
[Java 并发] Java并发编程实践 思维导图 - 第一章 简介
根据《Java并发编程实践》一书原创 2014-11-08 10:08:27 · 5003 阅读 · 1 评论 -
[Java 并发] Java并发编程实践 思维导图 - 第五章 基础构建模块
根据《Java并发编程实践》一书整理的思维导图。希望能够有所帮助。原创 2014-11-23 10:01:20 · 4976 阅读 · 0 评论 -
[Java 并发] Java并发编程实践 思维导图 - 第六章 任务执行
根据《Java并发编程实践》一书整理的思维导图。希望能够有所帮助。第一部分:第二部分:第三部分:原创 2014-11-28 09:08:29 · 5231 阅读 · 0 评论 -
[Java 并发] Java并发编程实践 思维导图 - 第四章 对象的组合
[Java 并发] Java并发编程实践 思维导图 - 第四章 对象的组合。 整理的思维导图,希望对大家有所帮助。原创 2014-11-16 09:53:12 · 4929 阅读 · 0 评论 -
Effective JavaScript Item 63 注意异步调用中可能会被忽略的异常
异常处理是异步编程的一个难点。在同步的代码中,异常能够很容易地通过try catch语句来完成:try { f(); g(); h();} catch (e) { // handle any error that occurred...}但是在异步代码中,使用一个try代码块将所有可能出现的异常都包括在内是不现实的。实际上,异步API设置不能原创 2014-11-16 09:22:36 · 3574 阅读 · 0 评论 -
Effective JavaScript Item 61 不要阻塞事件队列
JavaScript处理并发事件的机制是十分友好和强大的,它结合了事件队列(Event Queue)/事件循环并发(Event-loop Concurrency)和一套异步调用API。这因为这一点,JavaScript不仅可以在浏览器环境中运行,还可以在桌面应用和服务器应用中运行,如Node.js。令人奇怪的是,ECMAScript标准时至今日对并发这个问题还是只字未提。所以以下提到的各种原创 2014-11-14 12:32:12 · 3864 阅读 · 0 评论 -
Effective JavaScript Item 62 在异步调用中使用嵌套或者命名的回调函数
在一开始,理解异步程序的调用顺序会有些困难。比如,下面的程序中,starting会先被打印出来,然后才是finished:downloadAsync("file.txt", function(file) { console.log("finished");});console.log("starting");downloadAsync方法在执行之后会立即返回,它只是原创 2014-11-15 09:40:31 · 3759 阅读 · 0 评论 -
[Java 并发] Java并发编程实践 思维导图 - 第三章 对象的共享
根据《Java并发编程实践》一书整理的思维导图。原创 2014-11-13 10:11:22 · 5704 阅读 · 1 评论 -
[Java 并发基础] 也来聊聊Java多线程中的一些概念问题
文章导航什么是多线程并发为什么要进行多线程并发编程线程安全Java内存模型映射到现代硬件架构内存可见性问题的解决方案synchronizedvolatile原子性和线程安全,锁和内存可见性什么是多线程并发理清并发和并行的概念。并发:同一个时间段内多个任务同时都在执行,并且都没有执行结束。并行:在单位时间内多个任务同时在执行。并发任务强调在一个时间段内同时执行,而一个时间段是由多个单位时间...原创 2019-07-13 20:43:12 · 878 阅读 · 0 评论