摘要: 内容整理自较早前的微机原理学习笔记,重点梳理了实现硬件中断机制所依赖几个数据结构和硬件原件。 为什么需要中断? 中断机制的出现是为了协调处理器与外部设备速度不一致的问题,以提高处理器的利用率。 试想我们打开了文本编辑器,处理器就不干活了,等着键盘输入,这会浪费多少处理器计算资源? 另一种方式是处理器 阅读全文
posted @ 2021-12-05 17:30 元思 阅读(4805) 评论(0) 推荐(5) 编辑
摘要: 现在主流的多处理器架构都在硬件水平上提供了对并发同步的支持。 今天我们讨论两个很重要的硬件同步指令:Test-and-Set和Compare-and-Swap ##Test and Set 一个Test-and-Set(TAS)指令包括两个子步骤,把给定的内存地址设置为1,然后返回之前的旧值。 这两 阅读全文
posted @ 2020-06-26 09:25 元思 阅读(4341) 评论(1) 推荐(3) 编辑
摘要: 为什么对缓存只删除不更新 不更新缓存是防止并发更新导致的数据不一致。 所以为了降低数据不一致的概率,不应该更新缓存,而是直接将其删除, 然后等待下次发生cache miss时再把数据库中的数据同步到缓存。 先更新数据库还是先删除缓存? 有两个选择: 1. 先删除缓存,再更新数据库 2. 先更新数据库 阅读全文
posted @ 2020-06-23 23:05 元思 阅读(7035) 评论(0) 推荐(0) 编辑
摘要: 1. 什么是内存模型? 在多处理器系统中,为了提高访问数据的速度,通常会增加一层或多层高速缓存(越靠近处理器的缓存速度越快)。 但是缓存同时也带来了许多新的挑战。比如,当两个处理器同时读取同一个内存位置时,看到的结果可能会不一样? 在处理器维度上,内存模型定义了一些规则来保证当前处理器可以立即看到其 阅读全文
posted @ 2020-06-17 13:41 元思 阅读(556) 评论(0) 推荐(2) 编辑
摘要: 互斥 互斥访问是并发编程要解决的核心问题之一。有许多种方法可以满足临界区的互斥访问,大体上可以分为三种: 一种是软件方法,即由用户程序承担互斥访问的责任,而不需要依赖编程语言或操作系统,譬如Dekker算法、Peterson算法等,通常这种方式会有一定的性能开销和编程难度。 第二种是操作系统或编程语 阅读全文
posted @ 2020-06-02 13:49 元思 阅读(2178) 评论(0) 推荐(2) 编辑
摘要: 主要内容 1. synchronized介绍 2. ReentrantLock介绍 3. ReentrantLock和synchronized的可伸缩性比较 4. Condition变量 5. ReentrantLock是公平的吗? 6. ReentrantLock这么完美吗? 7. 不要放弃syn 阅读全文
posted @ 2020-05-29 10:28 元思 阅读(1629) 评论(0) 推荐(0) 编辑
摘要: ####写在前面 原文作者是Java语言的架构师Brian Goetz,他也是Lambda项目的主导者,著有经典并发书《Java Concurrency in Practice》。这是一篇发表于2004年的古老文章了,在JDK5刚刚发布之后,作为Java布道者第一时间对JDK5的新特性做了很透彻的说 阅读全文
posted @ 2020-05-27 14:48 元思 阅读(577) 评论(0) 推荐(1) 编辑
摘要: 写在前面 我在学习Java NIO时,看到网上很多资料是从Reactor模式入手,当我继续深挖下去,意识到NIO的本质或许不只Reactor模式那么简单,那又是什么呢? 于是我决定从Linux的系统调用着手,想了解一下Linux系统怎么做到的并发I/O。 所以这篇文章,更多得是对最近学习Linux 阅读全文
posted @ 2019-12-10 15:58 元思 阅读(1955) 评论(1) 推荐(5) 编辑
摘要: 1. Controller不是Servlet 是Spring MVC中的唯一Servlet,(这点可通过查看FrameworkServlet的子类确认) Servlet容器(Tomcat)把所有请求都转发到 , 然后通过 把请求路由到具体的Controller中。 因此,Controller只是一个 阅读全文
posted @ 2019-02-28 12:13 元思 阅读(1909) 评论(0) 推荐(2) 编辑