无锁队列并非真的无锁

近几年经常被提起的无锁队列,似乎被视为解决高并发的万能良药。无锁队列是一种通过CPU提供的原子操作指令 CASFAA,以及循环重试,来实现的乐观并发控制算法。虽然无锁队列算法并未显式调用锁,但事实上,在多核环境下,所谓的无锁队列算法本质上就是实现了锁的功能。

首先,原子指令本身就是一种带锁的操作,只是锁的颗粒度较小而已。单核 CPU 系统的情况比较简单,因为单条指令操作总是原子的;而 SMP 的情况就比较复杂了,需要使用缓存一致性(Cache Coherence)的机制来确保操作的原子地执行。

早期 CPU 不支持原生的 CMPXCHG 指令,要实现 CAS 原子操作,必须先用 LOCK 指令锁住总线或需要访问的内存块。

……

Fournoas 说:

Fournoas 评论《#被罗翔的三观惊艳到了#》:

宁静的夏天
知了都睡了
蛆虫在狂欢
它们在粪坑里起誓
终有一天
变成苍蝇
乌乌泱泱
遮天蔽日

「专业人士」的自负

家中长辈患有糖尿病,一直服用法国施维雅的格列齐特缓释片,血糖控制得很好。然而自从药品集采后,医院就只有杭州国光的格列齐特缓释胶囊了。但是国产药效果并不好,无法有效控制住血糖,换回原研的格列齐特缓释片血糖就能控制住。通过和病友交流,也发现这并不是孤立现象。

看到网上有人讨论第五批国家药品集采的新闻,我就据实讲出自己的切身遭遇。没想到犹如将鞭炮扔进了粪坑——激起千层屎。各路「专业人士」纷纷跳出来指责我造谣、不懂瞎说、给行业抹黑,满口「一致性评价」、「DMPK」云云。简而言之就是要我闭嘴。

……

「并行」和「并发」

从中文字面上还是挺难区分「并行」和「并发」的,两者都带着一个「并」,似乎是个同义词。而在计算机科学中,「并行」和「并发」完全是两个不同的概念。两者并非互斥,也有相关联,但含义绝不可混淆。

英文辨析

「并行」的英文是 parallel,「并发」的英文是 concurrent。有意思的是,台湾将前者翻译成「平行」,后者翻译成「并行」。可见中文翻译基本是词不达意的。要区分两者还需从英文原文着手。

……

新切尔卡斯克事件

新切尔卡斯克事件,又称作新切尔卡斯克惨案(俄语:Новочеркасский Расстрел)。事件发生于1962年6月2日,苏联军队和克格勃对新切尔卡斯克手无寸铁的示威工人开枪。事件造成26人死亡,87人受伤。事后200多人被捕,其中7人遭到处决。2020年的俄罗斯电影《亲爱的同志》所描述的便是这起事件。

1962年新切尔卡斯克工人流血事件纪念石

1962年新切尔卡斯克工人流血事件纪念石

……

    Fournoas 说:

    这位王者荣耀历史顾问说的没错——毕竟“一切历史都是当代史”。

    就像苏联历史学家不会承认卡廷森林惨案,也不会承认乌克兰大饥荒;土耳其历史学家不会承认亚美尼亚大屠杀一样。

    这样说来,英国历史学家承认爱尔兰大饥荒简直就是犯了叛国罪。

    感冒和发烧的自我诊断

    感冒或发烧去医院看病,一来耽误时间,二来容易引起交叉感染。现在很多医院提供诊前检查服务,可以挂号后直接做血常规检查,节省了候诊时间。如果你能读懂血常规报告,完全可以自我诊断服药。

    首先,我们需要明确感冒或发烧究竟是病毒感染还是细菌感染,或者是合并感染。只有细菌感染才需要服用抗生素。而病毒感染引起的发烧更为常见,这种情况不需要服用抗生素。

    ……

      Fournoas 说:

      问:躺平有用吗?

      答:没用。因为会躺枪