Spring 是什么 轻量级开源框架,核心是 IOC 和 AOP,用于简化 Java 开发。 Spring 的核心 IOC 控制反转 和 AOP 面向切面 DI(依赖注入)是 IOC 的具体实现 AOP 默认对接口用 JDK 动态代理(基于接口反射),对类用 CGLIB 动态代理(基于子类字节码生成) AOP 核心思想:分离业务逻辑与横切关注点,提高代码复用性和可维护性 ...
什么是零拷贝?
什么是零拷贝? 磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝、直接 I/O、异步 I/O 等等,这些优化的目的就是为了提高系统的吞吐量,另外操作系统内核中的磁盘高速缓存区,可以有效的减少磁盘的访问次数。 为什么要有 DMA 技术? 在没有 DMA 技术前,I/O 的过程是这样的: CPU 发出对应的指令给磁盘控制...
简单MCP Client实现
使用 uv 创建项目和依赖 uv init mcp-client-demo uv add "mcp[cli]" pip install mcp 编写 mcp_client.py from mcp import ClientSession, StdioServerParameters from mcp.client.stdio import stdio_client # Crea...
微服务改造,本质是业务问题驱动的技术决策
一、微服务改造,本质是业务问题驱动的技术决策 “微服务改造其实是个业务问题”,意思是: 微服务的引入不是为了炫技,而是为了解决业务发展过程中出现的问题。 二、如何理解:从三个维度入手 1. 业务驱动架构演进:不是为了“技术时髦” 微服务不是“为了用微服务而微服务”。 它的本质动因往往是: 业务复杂度增加(多个团队并行开发,多业务线拓展) 部署上线要求变高(某个业务需要独立发布、灰度...
实现一个简单的MCP Server
安装 uv && 初始化项目 pip install uv==0.5.24 uv init mcp_demo1 安装依赖 FastMCP cd mcp_demo1 uv add "mcp[cli]" mcp_server 代码实现,使用标准输出 # server.py from mcp.server.fastmcp import FastMCP # 创建一个...
Thread-Per-Message 模式、Worker Thread 模式、生产者-消费者模式
Thread-Per-Message 模式、Worker Thread 模式、生产者-消费者模式 是多线程中最基础且实用的分工设计模式,它们在任务分离、资源复用、吞吐优化方面各有优势。 一、Thread-Per-Message 模式(每个请求一个线程) 解释: 每个外部请求(如一个 socket 连接)由一个独立线程来处理。常见于早期 HTTP、TCP 服务实现中。 特点: ...
Reactor 和 Proactor 这两个高性能网络模式
演进 如果要让服务器服务多个客户端,那么最直接的方式就是为每一条连接创建线程。 其实创建进程也是可以的,原理是一样的,进程和线程的区别在于线程比较轻量级些,线程的创建和线程间切换的成本要小些,为了描述简述,后面都以线程为例。 处理完业务逻辑后,随着连接关闭后线程也同样要销毁了,但是这样不停地创建和销毁线程,不仅会带来性能开销,也会造成浪费资源,而且如果要连接几万条连接,创建几万个线程去应...
并发编程:无锁方案 CAS
在并发编程中,“无锁方案”是指不使用传统的互斥锁(如 synchronized、ReentrantLock)来实现线程安全,而是依赖 CAS(Compare-And-Swap)、原子变量、volatile、内存屏障等机制,达到无阻塞(Non-blocking)或最小阻塞的高性能并发效果。 一、无锁方案的设计思想 基于 CAS 操作的原子更新: CAS 保证变...
并发编程:起源
并发编程是计算机科学中的一个重要领域,尤其在多核 CPU 广泛使用、任务响应要求更高的今天,越来越成为开发者必须掌握的能力。 一、并发编程的历史来源 背景演进: 单核时代(1950s-1980s): 初期计算机处理速度慢,CPU资源非常宝贵。 为了提高CPU利用率,引入了多任务调度(如批处理系统、时分多道程序设计)。 ...