《Java Concurrency In Practice》阅读笔记(更新中...)
目前的观感 东西是好的,整体叙事结构也合理,但是每章内部的叙事逻辑有点混乱,加上形式化描述的使用,读起来不好读,心智负担比较大。 需要通读全书之后,仔细梳理一番。 这本书的整体结构如下: Chapter 1:介绍并发解决什么问题,又带来什么问题。 Part I:介绍并发和线程安全的理论,讲解如何用并发库构建线程安全的类。 Chapter 2&...
目前的观感 东西是好的,整体叙事结构也合理,但是每章内部的叙事逻辑有点混乱,加上形式化描述的使用,读起来不好读,心智负担比较大。 需要通读全书之后,仔细梳理一番。 这本书的整体结构如下: Chapter 1:介绍并发解决什么问题,又带来什么问题。 Part I:介绍并发和线程安全的理论,讲解如何用并发库构建线程安全的类。 Chapter 2&...
部署在多节点上的应用就是分布式应用 部署在多个节点(物理机、虚拟机或者容器)上的应用就是分布式应用或者分布式系统,DNS 系统就是典型的分布式系统。 微服务应用几乎总是分布式应用,因为每个微服务部署在不同的节点中。 例外的情况是,虽然应用被拆分成了多个微服务,但是所有的微服务都部署在了同一个节点上。 分布式解决了单点故障和单机性能瓶颈问题 ...
本文记录了我对计算机网络的理解,随着自己理解的变化会不断更新 我让 Gemini 帮我起了 悟记 这个名字来表达此意 文章结构 本文先抛出了一个常见的面试题:从键入网址到页面显示,这中间发生了什么? 通过回答这个问题来理解现代计算机网络的运行方式。 在描述时,会有意将数据在网络中的处理过程拆分为不同的阶段,同时深入过程中涉及的各个协议的细节,藉此来引入计算机网络的分层模型:...
并发编程的问题 多线程不一定更快 线程越多,上下文切换就越频繁,CPU 用于执行计算任务的时间就越短。 减少上下文切换的办法 降低锁粒度。锁竞争会导致抢锁失败的线程被挂起,产生一次上下文切换。所以通过降低锁的粒度,减少争抢同一把锁的线程数,可以减少上下文切换。 CAS 代替加锁。CAS 操作不涉及锁竞争,也可...
因为不想把本机的环境搞得乱七八糟,所以想到了 Dev Container 来进行开发,这样本机只需要 Git 环境和一个 IDE,其他的交给 Docker 但是不得不说,IDEA 官网的 Dev Container 指导 过于简略,里面埋了很多坑,所以在此记录下中间走过的路,踩过的坑,以备后续翻阅 先决条件 你有一个包含 .devcontainer 文件夹和 devcontain...
抽烟者问题 问题描述: 有一个供应者和三个抽烟者。每个抽烟者不停地卷烟并抽掉它,但要卷起并抽掉一支烟,抽烟者需要有三种材料:烟草、纸和胶水。三个抽烟者中第一个拥有烟草,第二个拥有纸,第三个拥有胶水。供应者进程无限地供应三种材料,供应者每次将两种材料放到桌子上,拥有剩下那种材料的的抽烟者卷起一根烟并抽掉它,并给供应者一个信号告诉已完成,此时供应者就会将另外两种材料放到桌上,如此重复(...
睡眠理发师问题 经典睡眠理发师问题 问题描述: 理发店有一位理发师、一把理发椅和 \(n\) 把供等候理发的顾客休憩的椅子;如果没有顾客,理发师便在理发椅上睡觉,当有顾客到来时,他唤醒理发师;如果理发师正在理发时又有新顾客来到,那么,如果还有空椅子,顾客就坐下来等待,否则就离开理发店。 经典问题,固定解法。如下: semaphore barber = 0; semaph...
读者-写者问题 问题描述: 有读者和写者两组并发进程,共享一个文件,当多个读进程同时访问共享数据时不会产生副作用,但若某个写进程和其他进程(读进程或写进程)同时访问共享数据时,则可能导致数据不一致的错误。因此要求: 允许多个读者同时对文件执行读操作; 只允许一个写者对文件执行写操作; 任何写者在完成写操作前不允许其他读者或写者工作; 写者在执...
其他 PV 问题 入库问题 问题描述: 在一个仓库中可以存放 A 和 B 两种产品,要求: 每次只能存入一种产品; A 产品数量 \(-\) B 产品数量 \(< M\) ; B 产品数量 \(-\) A 产品数量 \(< N\) 。 其中, \(M, N\) 是正整数,试用 PV 操作描述产品 A 和 产品 ...
哲学家就餐问题 题目描述: 有 \(5\) 位哲学家围坐在一张圆桌旁,桌子中央放有一盘通心面,每人面前有一只空盘子,每两人之间放一把叉子;每位哲学家思考、饥饿,然后吃通心面;为了吃面,哲学家必须获得两把叉子,且每人只能从紧邻自己的左边或右边去取叉子。 为了避免 \(5\) 名哲学家同时拿起一边筷子导致死锁,有几种方法: 至多允许 \(4\) 名哲学家同时吃通...