刷新
并发编程中的乐观锁与悲观锁

博主头像 一、核心思想:不同的并发哲学 乐观锁和悲观锁是处理数据竞争(多个线程可能同时修改同一数据)的两种不同策略。它们的区别源于对“冲突发生概率”的不同假设。 二、对比总结先行 特性 悲观锁 乐观锁 哲学 假设冲突很可能发生 假设冲突不太可能发生 机制 先取锁,再操作 先操作,更新前再检查冲突 实现 syn ...

海量数据如何“安家”?一文读懂哈希、范围和一致性哈希三大分片策略

博主头像 将单机问题转化为分布式解决方案时,首要任务是对问题进行分解,使得集群中的每台机器负责处理原问题的一个子集。无论是计算任务还是存储任务,其操作对象都是数据。因此,如何将海量数据有效地分解并分配到集群的不同节点上,即数据分布(也常称为数据分片,Data Partitioning/Sharding),是构 ...

“卧槽,系统又崩了!”——别慌,这也许是你看过最通俗易懂的分布式入门

博主头像 在分布式系统中,有效应对节点故障、网络分区延迟和数据一致性等挑战至关重要。本文将剖析保障分布式系统可靠性的核心机制:数据分片实现水平扩展,冗余副本保障数据高可用,租约(Lease)机制优化节点状态共识与资源管理,多数派(Quorum)原则确保操作的一致性,Gossip等去中心化协议高效同步集群状态。 ...

从JSON到Protobuf,深入序列化方案的选型与原理

博主头像 序列化:数据跨越边界的翻译官 序列化(Serialization)用于描述RPC服务接口和数据结构。在RPC通信中,客户端和服务器之间传输的数据通常是结构化的,如调用方法、请求参数、返回值等。这些结构化数据需要通过序列化过程转换为二进制流,以便在网络中进行传输。 目前,常见的跨语言序列化编码方式包括 ...

gRPC不是银弹:为内网极致性能,如何设计自己的RPC协议?

博主头像 自研RPC协议:为性能而生的赛道利器 尽管gRPC凭借其标准化、跨语言和基于HTTP/2的强大特性,在公网和云原生环境中大放异彩,但在某些特定的内网环境中,对性能、延迟和资源占用的要求可能更为苛刻。HTTP/2虽然高效,但其帧结构和头部处理机制相较于专为内网设计的极简协议,仍可能引入不必要的开销。 ...

从HPACK到多路复用,揭秘HTTP/2如何终结网络拥堵

博主头像 头部压缩 (HPACK) 在HTTP/1中,每个请求和响应都会发送大量重复的头部信息,比如 Cookie、User Agent、Accept 等,会使得大量带宽被这些冗余的数据占用。为了解决这个问题,HTTP/2引入了HPACK算法来压缩头部信息。HPACK算法有两个主要的特性。 1)静态表(Sta ...

RPC的三大问题:跨语言、跨平台通信的终极解决方案是如何炼成的?

博主头像 服务间通信的效率与可靠性是系统性能和稳定性的关键。远程过程调用(RPC)作为跨进程、跨机器交互的核心机制,其传输协议的设计至关重要。一个优秀的RPC传输协议需要应对三大挑战:1)跨语言、跨平台的数据表示与解析;2)保障网络传输的完整性、顺序性与效率;3)在服务间建立清晰统一的调用约定。 本文将从 H ...

架构师~软件分层设计总结

博主头像 开发规范的整理 RESTful Api规范 软件分层设计 数据实体划分 分层设计主流技术栈 1. RESTful Api规范 自解释,不要用驼峰,小写,单词之间用减号,URL路径使用单数还是复数没有要求,推荐复数 用户列表 GET /users 用户1的内容 GET /users/1 用户1的评论列 ...

【面向接口编程(IOP)典型场景】底层组件如何实现回调通知上层应用系统?

博主头像 本文介绍了在账务插件开发中,如何通过“面向接口编程”实现异步转账完成后的回调通知机制。通过定义回调接口 `TransferCallback`,账务组件在异步操作完成后可通知上层应用进行后续业务处理。文章提供了纯 Java 和 Spring 两种实现方式的代码示例,展示了接口在插件化架构中的重要作用,... ...

十年大厂员工终明白:MySQL性能优化的尽头,是对B+树的极致理解

博主头像 存储引擎 存储引擎是数据库管理系统(DBMS)或键值存储系统的核心组件,它定义了数据在持久化存储介质上如何组织、存储、检索和管理。不同的存储引擎针对特定负载(如读密集型、写密集型、混合型)和数据模型(如关系型、键值型、文档型)进行优化。 目前常见的存储引擎使用的存储数据结构有如下几种。 1)哈希表( ...

Tolk.dll 架构拆分

博主头像 我今天在和 GPT 讨论之前说过的新想法:把 Tolk 拆分,拆分为: 入口:用于接入其他程序。 兼容现存的入口:主要是 Tolk.dll、TolkDotNet.dll、Tolk.jar;nvda.dll 等。再加一个 http 的接口用于测试。这部分是最大的改动,可以降低维护成本,也能更好的支持多 ...

硬盘性能提升100倍的秘密:看懂顺序I/O的魔力

博主头像 I/O缓存 局部性原理 局部性原理(Principle of Locality)指在程序执行过程中,倾向于访问某些局部特定的数据或指令,而不是随机地访问整个内存空间。这是缓存技术得以有效的根本原因。 1)时间局部性(Temporal Locality):如果一个数据项被访问,那么在不久的将来它很可能 ...

从纳秒到毫秒的“时空之旅”:CPU是如何看待内存与硬盘的?

博主头像 在数据暴涨时代,如何高效存储和管理海量数据已成为应用系统的核心挑战。这不仅关乎读写性能,更涉及并发场景下性能与持久化之间的平衡。要应对这一挑战,既需要理解不同存储介质的物理特性与性能边界,也需通过数据结构、存储模型与操作系统机制的协同设计,达成技术上的最优平衡。 本文将从计算机系统的分层存储体系这一 ...

性能优化之母:为什么说“方法内联”是编译器优化中最关键的一步棋?

博主头像 方法内联 方法内联(Method Inlining)是编译器在进行优化时,将被调用方法的代码直接嵌入到调用点,以替代方法调用指令的过程。它不仅消除了方法调用的开销,还为后续的优化(如常量传播、死代码消除等)创造了条件。 Java程序的方法调用会涉及到如下步骤: 1)保存当前方法的程序计数器(返回地址 ...

new出来的对象,不一定在堆上?聊聊Java虚拟机的优化技术:逃逸分析

博主头像 逃逸分析(Escape Analysis)是一种静态程序分析技术,主要用于判定对象的可见范围(Visibility)与生命周期(Lifetime)。该技术是现代即时编译器实现局部化优化、提升内存使用效率、降低同步成本的基础。 通俗来说,逃逸分析的核心在于回答这样一个问题:某个对象是否可能“逃逸”出它 ...

解锁硬件潜能:Java向量化计算,性能飙升W倍!

博主头像 机器相关的编译优化 与机器相关的编译优化常见的有指令选择(Instruction Selection)、寄存器分配(Register Allocation)、窥孔优化(Peephole Optimization)等。这些机器级优化通常发生在中间表示向目标代码生成之间的后端编译阶段。 与源代码层面的优 ...

<123···50>