摘要:现在主流的多处理器架构都在硬件水平上提供了对并发同步的支持。 今天我们讨论两个很重要的硬件同步指令:Test-and-Set和Compare-and-Swap ##Test and Set 一个Test-and-Set(TAS)指令包括两个子步骤,把给定的内存地址设置为1,然后返回之前的旧值。 这两 阅读全文
posted @ 2020-06-26 09:25 元思 阅读(376) 评论(0) 推荐(2) 编辑
摘要:为什么对缓存只删除不更新 不更新缓存是防止并发更新导致的数据不一致。 所以为了降低数据不一致的概率,不应该更新缓存,而是直接将其删除, 然后等待下次发生cache miss时再把数据库中的数据同步到缓存。 先更新数据库还是先删除缓存? 有两个选择: 1. 先删除缓存,再更新数据库 2. 先更新数据库 阅读全文
posted @ 2020-06-23 23:05 元思 阅读(1483) 评论(0) 推荐(0) 编辑
摘要:1. 什么是内存模型? 在多处理器系统中,为了提高访问数据的速度,通常会增加一层或多层高速缓存(越靠近处理器的缓存速度越快)。 但是缓存同时也带来了许多新的挑战。比如,当两个处理器同时读取同一个内存位置时,看到的结果可能会不一样? 在处理器维度上,内存模型定义了一些规则来保证当前处理器可以立即看到其 阅读全文
posted @ 2020-06-17 13:41 元思 阅读(222) 评论(0) 推荐(1) 编辑
摘要:互斥 互斥访问是并发编程要解决的核心问题之一。 有许多种方法可以满足临界区的互斥访问。大体上可以分为三种, 一种是软件方法,即由用户程序承担互斥访问的责任,而不需要依赖编程语言或操作系统,譬如Dekker算法、Peterson算法等,通常这种方式会有一定的性能开销和编程难度。 第二种是操作系统或编程 阅读全文
posted @ 2020-06-02 13:49 元思 阅读(543) 评论(0) 推荐(2) 编辑
摘要:主要内容 1. synchronized介绍 2. ReentrantLock介绍 3. ReentrantLock和synchronized的可伸缩性比较 4. Condition变量 5. ReentrantLock是公平的吗? 6. ReentrantLock这么完美吗? 7. 不要放弃syn 阅读全文
posted @ 2020-05-29 10:28 元思 阅读(436) 评论(0) 推荐(0) 编辑
摘要:主要内容 1. 线程同步标准的处理方法:上锁 2. 锁的问题 3. 硬件同步原语CAS 4. 使用CAS实现计数器 5. Lock-free和 wait-free 算法 6. Atomic原子变量类 十五年前,多处理器系统是高度专业化的系统,通常耗资数十万美元(其中大多数具有两到四个处理器)。 如今 阅读全文
posted @ 2020-05-27 14:48 元思 阅读(267) 评论(0) 推荐(1) 编辑
摘要:写在前面 我在学习Java NIO时,看到网上很多资料是从Reactor模式入手,当我继续深挖下去,意识到NIO的本质或许不只Reactor模式那么简单,那又是什么呢? 于是我决定从Linux的系统调用着手,想了解一下Linux系统怎么做到的并发I/O。 所以这篇文章,更多得是对最近学习Linux 阅读全文
posted @ 2019-12-10 15:58 元思 阅读(683) 评论(1) 推荐(5) 编辑
摘要:1. Controller不是Servlet 是Spring MVC中的唯一Servlet,(这点可通过查看FrameworkServlet的子类确认) Servlet容器(Tomcat)把所有请求都转发到 , 然后通过 把请求路由到具体的Controller中。 因此,Controller只是一个 阅读全文
posted @ 2019-02-28 12:13 元思 阅读(1044) 评论(0) 推荐(1) 编辑