官术网_书友最值得收藏!

Chapter 2. Lock-Free Concurrency

In Chapter 1, Traditional Concurrency, we reviewed thread synchronization with locking and how to use locks effectively. However, there will be still performance overhead related to locking. The best way to avoid such issues is by not using locks at all whenever possible. Algorithms that do not use locking are referred to as lock-free algorithms.

Lock-free algorithms in turn are of different types. One of the most important types is wait-free algorithms. These algorithms not only evade the use of locks, but also are guaranteed to not wait for any events from other threads. This is a best-case scenario but unfortunately, it is a rare situation when we can avoid waiting for the other threads at all. Usually, a real concurrent program tries to be as close as possible to wait-free, and this is what every developer should try to achieve.

There is one more category of algorithms that do not use OS-level thread blocking but use spin locks. This allows the creation of quite efficient code in situations when the code inside the lock has to run very fast. Such algorithms can be called lock-free in various sources, but strictly speaking they are not as they do not guarantee that the algorithm will be progressing, since it is possible it gets blocked in various situations. We will discuss such situations later in Chapter 10, Troubleshooting Parallel Programs.

Note

Please notice that a multithreaded program can be targeted in different scenarios, and thus the metrics could be different. For example, if our goal is to save the battery charge of a laptop or to save the CPU workload, locking techniques are preferred (until some point when there will be too many blocked threads). However, if we need overall performance, then lock-free algorithms are usually better.

主站蜘蛛池模板: 本溪| 阳信县| 兴安盟| 广丰县| 龙里县| 明光市| 原平市| 潼关县| 宣恩县| 普兰店市| 靖边县| 文成县| 马龙县| 铁岭市| 乡宁县| 富顺县| 陵川县| 尉氏县| 海原县| 铁岭县| 永川市| 崇信县| 望都县| 铁力市| 杭锦后旗| 哈巴河县| 循化| 绥阳县| 稷山县| 调兵山市| 扎兰屯市| 沙雅县| 武功县| 保靖县| 沅陵县| 乌什县| 文化| 白沙| 永登县| 达州市| 双辽市|