Preview

Научно-технический вестник информационных технологий, механики и оптики

Расширенный поиск

Оценка производительности алгоритмов синхронизации в средах исполнения с легкими потоками на языке С++

https://doi.org/10.17586/2226-1494-2026-26-1-125-134

Аннотация

Введение. Традиционно, многопоточные структуры данных разрабатывались и тестировались для вызовов из потоков операционной системы. Однако в последнее время в языках программирования появилась альтернатива — легкие потоки (иначе известные, как асинхронные вызовы, и корутины). Такие потоки бывают двух видов со стеком и без него. В настоящей работе рассмотрены стековые корутины. Основное преимущество легких потоков заключается в меньшем количестве накладных расходов. В отличие от потоков операционной системы, в стандартной библиотеке языка С++ отсутствует реализация стековых легких потоков. Они предоставляются несколькими библиотеками, отличающимися: планированием исполнения потока, способом хранения данных в памяти и интерфейсом использования. Кроме того, переиспользование существующего кода невозможно из-за необходимости явной разметки кода точками переключения контекста, отсутствие которых может приводить к взаимной блокировке легких потоков. Для ограничения области исследования рассмотрен конкретный вид многопоточных примитивов — мьютекс (иначе известный, как взаимное исключение). 
Метод. Выполнен анализ нескольких библиотек для работы с легкими потоками: Argobots, Boost Fibers, Userver. На основе оценки их функциональности, разработан трехступенчатый механизм ожидания, использующий активное ожидание, переключение контекста, а также способы приостановки и возобновления легкого потока. Описание механизма включает предложение об общем способе его внедрения в известные алгоритмы мьютексов. Механизм служит дополнительным слоем абстракции между библиотеками легких потоков и мьютексами, позволяя реализовывать их в общем виде. Из-за отсутствия существующих решений, был создан инструмент для тестирования и оценки производительности модифицированных мьютексов. 
Основные результаты. С помощью предложенного метода ряд известных мьютексов был адаптирован для вызовов из легких потоков. Для тестирования получившихся примитивов разработан инструмент, позволяющий интегрировать произвольные реализации легких потоков и учитывающий специфику работы с ними. В результате была измерена пропускная способность адаптированных мьютексов с помощью нового инструмента на специальном сценарии, отражающем особенности кооперативной многозадачности. 
Обсуждение. В перспективе планируется формирование библиотеки, включающей все известные реализации мьютексов, адаптированных под вызовы из легких потоков. Это позволит провести детальное сравнение производительности этих алгоритмов в зависимости от: библиотеки легких потоков, алгоритмов планировщика и архитектуры процессора. Ожидается, что детальный анализ поведения существующих алгоритмов позволит создать новую реализацию мьютекса, работающего наиболее эффективно на вызовах из легких потоков.

Об авторах

Т. М. Скаженик
Университет ИТМО
Россия

Скаженик Тарас Михайлович — аспирант

Санкт-Петербург, 197101



В. Е. Аксенов
Университет ИТМО
Россия

Аксенов Виталий Евгеньевич — PhD, доцент

Санкт-Петербург, 197101

sc 57195411657



А. А. Малахов
Университет Неймарк
Россия

Малахов Антон Александрович — научный сотрудник

Нижний Новгород, 603138



А. В. Чурбанов

Россия

Чурбанов Андрей Васильевич — независимый исследователь



Список литературы

1. Moore G.E. Cramming more components onto integrated circuits // Electronics. 1965. V. 38. N 8. P. 114–117.

2. Sutter H. The free lunch is over: a fundamental turn toward concurrency in software // Dr. Dobb’s Journal. 2005. V. 30. N 3. P. 202–210.

3. Olukotun O.A., Hammond L., Laudon J.P. Chip Multiprocessor Architecture: Techniques to Improve Throughput and Latency. Morgan & Claypool Publishers, 2007. 145 p.

4. Lameter C. NUMA (Non-Uniform Memory Access): An Overview: NUMA becomes more common because memory controllers get close to execution units on microprocessors // Queue. 2013. V. 11. N 7. P. 40–51. https://doi.org/10.1145/2508834.2513149

5. Seo S., Amer A., Balaji P., Bordage C., Bosilca G., Brooks A., et al. Argobots: a lightweight low-level threading and tasking framework // IEEE Transactions on Parallel and Distributed Systems. 2018. V. 29. N 3. P. 512–526. https://doi.org/10.1109/tpds.2017.2766062

6. Castello A., Gual R.M., Seo S., Balaji P., Quintana-Orti E.S., Pena A.J. Analysis of threading libraries for high performance computing // IEEE Transactions on Computers. 2020. V. 69. N 9. P. 1279–1292. https://doi.org/10.1109/tc.2020.2970706

7. Tanenbaum A.S., Bos H. Modern Operating Systems. ‎ Pearson, 2014. 1136 p.

8. Rudolph L., Segall Z. Dynamic decentralized cache schemes for mimd parallel processors // ACM SIGARCH Computer Architecture News. 1984. V. 12. N 3 . P. 340–347. https://doi.org/10.1145/773453.808203

9. Mellor-Crummey J.M., Scott M.L. Algorithms for scalable synchronization on shared-memory multiprocessors // ACM Transactions on Computer Systems. 1991. V. 9. N 1. P. 21–65. https://doi.org/10.1145/103727.103729

10. Craig T.S. Building FIFO and Priorityqueuing Spin Locks from Atomic Swap. Technical Report TR 93-02-02. Department of Computer Science, University of Washington, 1993. 29 p.

11. Chabbi M., Fagan M., Mellor-Crummey J. High performance locks for multi-level NUMA systems // ACM SIGPLAN Notices. 2015. V. 50. N 8. P. 215–226. https://doi.org/10.1145/2858788.2688503

12. Dice D., Kogan A. Compact NUMA-aware locks // Proc. of the 14th EuroSys Conference. 2019. P. 1–15. https://doi.org/10.1145/3302424.3303984

13. Shanley T. x86 Instruction Set Architecture. MindShare Press, 2010. 1568 p.

14. Oberhauser J., Oberhauser L., Paolillo A., Behrens D., Fu M., Vafeiadis V. Verifying and optimizing the HMCS lock for Arm servers // Lecture Notes in Computer Science. 2021. V. 12754. P. 240–260. https://doi.org/10.1007/978-3-030-91014-3_17

15. Goodacre J., Sloss A.N. Parallelism and the ARM instruction set architecture // Computer. 2005. V. 38. N 7. P. 42–50. https://doi.org/10.1109/mc.2005.239

16. Bartel J. Non-preemptive multitasking // The Computer Journal. 1988. V. 30. P. 37–39.

17. Karsten M., Barghi S. User-level threading: Have your cake and eat it too // Proc. of the ACM on Measurement and Analysis of Computing Systems. 2020. V. 4. N 1. P. 1–30. https://doi.org/10.1145/3379483

18. Madsen O.L. Using coroutines for multi-core preemptive scheduling // Proc. of the 11th Workshop on Programming Languages and Operating Systems. 2021. P. 46–52. https://doi.org/10.1145/3477113.3487271

19. Shiina S., Iwasaki S., Taura K., Balaji P. Lightweight preemptive user-level threads // Proc. of the 26th ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming. 2021. P. 374–388. https://doi.org/10.1145/3437801.3441610

20. Donovan A.A., Kernighan B.W. The Go Programming Language. Addison-Wesley Professional, 2015. 400 p.


Рецензия

Для цитирования:


Скаженик Т.М., Аксенов В.Е., Малахов А.А., Чурбанов А.В. Оценка производительности алгоритмов синхронизации в средах исполнения с легкими потоками на языке С++. Научно-технический вестник информационных технологий, механики и оптики. 2026;26(1):125-134. https://doi.org/10.17586/2226-1494-2026-26-1-125-134

For citation:


Skazhenik T.M., Aksenov V.E., Malakhov A.A., Churbanov A.V. Performance evaluation of synchronization algorithms in lightweight thread environments in C++. Scientific and Technical Journal of Information Technologies, Mechanics and Optics. 2026;26(1):125-134. (In Russ.) https://doi.org/10.17586/2226-1494-2026-26-1-125-134

Просмотров: 227

JATS XML


Creative Commons License
Контент доступен под лицензией Creative Commons Attribution 4.0 License.


ISSN 2226-1494 (Print)
ISSN 2500-0373 (Online)