Actual Concurrency Patterns: An Initial Collection

A. V. Prutzkow

Аннотация


Современные шаблоны многопоточности: исходный набор

Пруцков А. В.

Многопоточность стала основным способом повышения производительности. Разработка многопоточных программ могла бы быть ускорена за счет применения шаблонов. Шаблоны собраны в книгах, изданных в 2000-х годах, и отражают состояние многопоточности того времени. Современные источники содержат шаблоны, но не систематизируют их, как шаблоны проектирования объектно-ориентированных программ. Цель работы – активизировать обсуждение шаблонов многопоточных программ за счет классификации и начального сбора актуальных шаблонов. Шаблоны разделены на следующие типы: (1) Synchronized Data Processing, (2) Task Decomposition, (3) Data Decomposition, (4) Class/Method Structural Patterns, (5) Thread Control, (6) Architectural Patterns. Представителями этих типов являются следующие шаблоны: (1) Shared/Atomic Method, Resource Pool, Copy on Write Collection, Lock Striping, (2) Pipeline, (3) Data Item Enumeration, Divide and Conquer (Fork/Join), (4) Before/After, Condition with Volatile, (5) Invoke All, Invoke Any, (6) Producer–Consumer, Readers–Writers, Publisher–Subscriber. Эти шаблоны собраны, потому что они являются: базовыми, или актуальными, или типичные представители типов шаблонов. Шаблоны не зависят от языка программирования, но в листингах использовался язык программирования Java.


Ключевые слова


Многопоточность; шаблоны; потоки выполнения; синхро-низация; разложение задач; разложение данных; Java.

Полный текст:

PDF (English)

Литература


Abraham U. (1999) Models for Concurrency // CRC Press.

del Rio Astorga D. et al. (2017) A Generic Parallel Pattern Interface for Stream and Data Processing // Concurrency and Computation: Practice and Experience, (29) / DOI: 10.1002/cpe.4175.

Bobrov K. (2024) Grokking Concurrency // Manning.

Bugayenko Ye. (2017) Elegant Objects // No Publisher.

Carver R. H., Tai K. (2005) Modern Multithreading: Implementing, Testing, and Debugging Multithreaded Java and C++/Pthreads/Win32 Programs // Wiley.

Chow J. et al. (2015) Pipeline Pattern in an Object-Oriented, Task-Parallel Environment // Concurrency and Computation: Practice and Experience, (27).

Downey A. (2009) The Little Book of Semaphores // Green Tea Press.

Eugster P. Th. et al. (2003) The Many Faces of Publish/Subscribe // ACM Computing Surveys, 35(2).

Evans B. et al. (2022) The Well-Grounded Java Developer // Manning, 2nd ed.

Evans B., Gough J. (2024) Optimizing Cloud Native Java Practical Techniques for Improving JVM Application Performance // O’Reilly, 2nd ed.

Farchi E. et al. (2003) Concurrent Bug Patterns and How to Test Them // International Parallel and Distributed Processing Symposium.

Fernández González J. (2017) Mastering Concurrency Programming with Java 9 // Packt, 2nd ed.

Gamma E. et al. (1995) Design Patterns: Elements of Reusable Object-Oriented Software // Addison-Wesley.

Goetz B. et al. (2006) Java Concurrency in Practice // Addison-Wesley.

Hawkins P. et al. (2012) Concurrent Data Representation Synthesis // 33rd ACM SIGPLAN Conference on Programming Language Design and Implementation.

Lazidis A. et al. (2022) Open-Source Publish-Subscribe Systems: A Comparative Study // International Conference on Advanced Information Networking and Applications.

Lea D. (1999) Concurrent Programming in Java // Addison-Wesley, 2nd ed.

Malkhi D. (ed.) (2019) Concurrency: The Works of Leslie Lamport // ACM.

Mattson T. et al. (2005) Patterns for Parallel Programming // Addison Wesley.

Mohammed M. et al. (2016) Empirical Insight into the Context of Design Patterns: Modularity Analysis // 7th International Conference on Computer Science and Information Technology.

Prat-Pérez A. et al. (2013) Producer-Consumer: the Programming Model for Future Many-core Processors // International Conference on Architecture of Computing Systems.

Пруцков А. В. Многопоточность в Java: шаблоны и инструменты. М.: Курс, 2026. 188 с.

Sandén B. I. (2011) Design of Multithreaded Software // Wiley.

Sandén B. I. (1997) Concurrent Design Patterns for Resource Sharing // TRI-Ada.

Schmidt D. et al. (2000) Pattern-Oriented Software Architecture // John Wiley and Sons, V. 2: Patterns for Concurrent and Networked Objects.

Scott M., Brown T. (2024) Shared-Memory Synchronization // Springer, 2nd ed.

Sharan K. (2018) Java Language Features: With Modules, Streams, Threads, I/O, and Lambda Expressions // Apress.

Sottile M. et al. (2009) Introduction to Concurrency in Programming Languages // CRC Press.

Thomas P. (2025) The Role of Design Patterns in Facilitating Code Reuse and Reducing Development Time // No Publisher.

Urma R.-G. et al. (2019) Modern Java in Action. Lambdas, Streams, Functional and Reactive Programming // Manning.

Veen R., Vlijmincx D. (2024) Virtual Threads, Structured Concurrency, and Scoped Values // Apress.

Zapparoli L. H. (2021) GitHub - LeonardoZ/java-concurrency-patterns: Concurrency Patterns and features found in Java, through multithreaded programming. Threads, Locks, Atomics and more /// URL: https://github.com/LeonardoZ/java-concurrency-patterns.




DOI: https://doi.org/10.54708/2658-5014-SIIT-2025-no5-p136

Ссылки

  • На текущий момент ссылки отсутствуют.


(c) 2025 А. В. Пруцков