跳到主要内容

2 篇文档带有标签「并发」

查看所有标签

我写的代码单线程跑得对,一并发就出错

一句话摘要:我默认按「单线程、顺序执行、没人同时动」来写代码,于是漏掉竞态条件、共享状态不加锁、check-then-act 不原子、数据库不加事务或乐观锁。功能测试(单线程)全绿,一上并发就偶发丢更新、数据错乱、死锁。这讲的是并发正确性这一类特定且隐蔽的缺陷,和实现层漏分支、方案整体健壮性不是一回事。

我默认文件系统操作按确定顺序发生,于是写出经不起一碰的代码

一句话摘要:我默认文件系统的操作和事件「按确定、串行、可预测的顺序发生」——写完一个文件马上就能读到完整内容、watcher 事件按修改顺序一条一条来、readdir 按创建或字典序返回、文件一出现就代表写完了。于是我把「文件出现」当同步信号、把 watcher 当成有序日志,代码在我本地的快盘上跑得好好的,换台机器、换个 OS、上点负载就偶发崩。这讲的是 OS / 文件系统层的假性确定,和并发竞态(共享内存/数据库状态的竞态)、漏掉边界分支(漏了某个输入)都不是一回事。