<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>并发 on 老张开工了</title>
    <link>/%E5%B9%B6%E5%8F%91/</link>
    <description>Recent content in 并发 on 老张开工了</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Mon, 25 May 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="/%E5%B9%B6%E5%8F%91/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>并发编程：多线程与多进程</title>
      <link>/posts/2026/05/concurrency/</link>
      <pubDate>Mon, 25 May 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/05/concurrency/</guid>
      <description>并发编程概述 并发编程是提升程序性能的关键手段。Python 提供了三种主要的并发模型：&#xA;多线程（threading）：适用于 I/O 密集型任务 多进程（multiprocessing）：适用于 CPU 密集型任务 异步（asyncio）：适用于高并发 I/O 任务（下一章详解） 选择合适的并发模型至关重要——选错了不仅不会提升性能，反而可能让程序更慢。&#xA;理解并发与并行 # 并发：多个任务交替执行（看起来像同时） # 并行：多个任务真正同时执行（多核 CPU） # 类比： # - 并发 = 一个人交替做三件事 # - 并行 = 三个人各做一件事 线程 vs 进程 特性 线程 (Thread) 进程 (Process) 内存共享 共享同一进程内存 独立内存空间 创建开销 较低 较高 通信方式 直接访问共享变量 Queue/Pipe/共享内存 适合场景 I/O 密集型 CPU 密集型 GIL 影响 受 GIL 限制 不受 GIL 限制 安全性 需要锁来保护共享数据 天然隔离 GIL 详解 GIL（Global Interpreter Lock，全局解释器锁）是 Python 中最重要的并发概念：</description>
    </item>
    <item>
      <title>事务与并发控制</title>
      <link>/posts/2025/02/transaction-and-concurrency/</link>
      <pubDate>Sat, 15 Feb 2025 10:00:00 +0800</pubDate>
      <guid>/posts/2025/02/transaction-and-concurrency/</guid>
      <description>数据库的并发控制决定了多个用户同时读写时，数据一致性和性能的平衡。PostgreSQL 使用 MVCC（多版本并发控制）来优雅地解决这个问题。&#xA;什么是事务？ 事务是一组 SQL 操作的逻辑单位，满足 ACID 特性：&#xA;原子性（A）：要么全部成功，要么全部回滚 一致性（C）：事务前后数据状态一致 隔离性（I）：并发事务互不干扰（程度可调） 持久性（D）：提交后数据不会丢失 基本事务控制 -- 准备测试数据 CREATE TABLE bank_accounts ( id SERIAL PRIMARY KEY, name VARCHAR(50) NOT NULL, balance NUMERIC(10,2) DEFAULT 0 CHECK (balance &amp;gt;= 0) ); INSERT INTO bank_accounts (name, balance) VALUES (&amp;#39;张三&amp;#39;, 10000), (&amp;#39;李四&amp;#39;, 5000), (&amp;#39;王五&amp;#39;, 20000); BEGIN / COMMIT / ROLLBACK -- 转账操作：张三转 1000 给李四 BEGIN; UPDATE bank_accounts SET balance = balance - 1000 WHERE name = &amp;#39;张三&amp;#39;; UPDATE bank_accounts SET balance = balance + 1000 WHERE name = &amp;#39;李四&amp;#39;; -- 检查余额是否正确（此时其他会话还看不到变化） SELECT * FROM bank_accounts ORDER BY id; -- 确认无误后提交 COMMIT; 回滚事务 BEGIN; UPDATE bank_accounts SET balance = balance - 50000 WHERE name = &amp;#39;张三&amp;#39;; -- ❌ 余额不足 -- 发现错误，回滚全部操作 ROLLBACK; -- 查看数据，发现数据变回事务开始前的状态 SELECT * FROM bank_accounts; SAVEPOINT 保存点 BEGIN; INSERT INTO bank_accounts (name, balance) VALUES (&amp;#39;赵六&amp;#39;, 3000); SAVEPOINT after_insert; UPDATE bank_accounts SET balance = balance + 5000 WHERE name = &amp;#39;张三&amp;#39;; -- 决定撤销这笔更新 ROLLBACK TO after_insert; -- 张三的余额不受影响，但赵六已插入 COMMIT; 隔离级别 SQL 标准定义了四个隔离级别，从低到高依次限制不同的并发问题：</description>
    </item>
  </channel>
</rss>
