---
title: 好的并发代码，不等于 clever code
date: '2016-11-14 23:23:37'
draft: false
summary: 并发实现可以复杂，但复杂不等于巧；真正高质量的代码最终还是要让约束和行为清楚可推理。
slug: good-concurrent-code-is-not-the-same-as-clever-code
syndication:
- platform: Weibo
  url: https://weibo.com/1648815335/EhyRC8bhz
tags:
- java
- concurrency
- code-quality
- forkjoinpool
topics:
- software-engineering
type: post
---

很多人一看到不好懂的代码，就会直接扣上 `clever code` 的帽子。但在并发基础设施这类地方，这个判断经常过于粗暴。

像 `Doug Lea` 写的那些并发实现，包括 `ForkJoinPool`、`ConcurrentSkipListMap` 这类代码，本来就不是靠“直白流程”取胜的。它们面对的是竞争条件、内存语义、无锁路径和性能边界这些本来就复杂的问题，所以实现复杂并不奇怪。

我会觉得，真正需要警惕的不是“代码有点难”，而是那种复杂度没有问题支撑、只是作者为了炫技巧堆出来的写法。

反过来说，好的并发代码往往有个共同特点：

- 表面上可能不简单
- 但结构通常是有明确约束的
- 每个分支和原子操作都对应实际问题

所以评价这类代码，关键不是它一眼看上去顺不顺，而是它的复杂度到底是不是被问题本身逼出来的。
