学习无锁编程

无锁编程非常有意思,大约在高三的时候我第一次接触多线程、锁这些概念,并系统性学习了这些东西。

《深入理解计算机系统》这本书中,我对于缓存,计算机流水线等概念有了一些初步了解,接下来,在网络上一些基础教程中,我知道了什么是锁,临界区等。不过锁,信号量这些手段都存在一些比较大的开销。例如维护一个链表,并对于链表每一个节点加一个读写锁会使程序变得非常非常慢。

后来接了一个外边的工作,大体目标是通过无锁数据结构来优化高频交易系统的信息传递。由于在这种情形下,普通的信息交互手段(如socket等)过于缓慢,但是若干两个进程同时申请了一块共享内存,并在共享内存上实现一个消息队列,就可以纳秒级实现消息的传输。借此机会,我开始研究无锁数据类型

在《C++ Concurrency in Action》这本书中,学习了无锁队列,栈的写法。借助C++的原子CAS操作,我们可以模拟一个锁,已达到更高的运行效率。再到后连,原子操作中的内存顺序(Memory Order)开始困扰我,不过有幸阅读到了 http://preshing.com/ 这个博客,生动的讲述了本来非常深奥的概念。网络上已经有一些这个博客的翻译,不过质量都不怎么高,因此希望能够静下心,翻译这个博客的一系列博文,并打造出一个真真意义上有教学意义的系列文章

原创文章地址:【学习无锁编程】,转载时请注明出处mhy12345.xyz

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.