Ця стаття містить правописні, лексичні, граматичні, стилістичні або інші мовні помилки, які треба виправити. |
В комп'ютерних технологіях, програмна транзакційна пам'ять (англ. software transactional memory, STM) являє собою механізм управління паралелізмом, аналогічний механізму транзакцій баз даних для управління доступом до спільно використовуваної пам'яті в паралельних обчисленнях. Це альтернатива для синхронізації на основі блокування. Транзакція в цьому контексті є частиною коду, який виконує зчитування і запис в поділювану (спільно використовувану) пам'ять. Зчитування і запис логічно відбувається в одиничний момент часу, а проміжні стани невидимі для інших (результативних) транзакцій. Ідея забезпечення транзакцій апаратною підтримкою зародилася в 1986 році в роботі і патенті [en]. Ідея отримала публічне висвітлення завдяки [en] і [en]. У 1995 році [en] і Ден Тойту доповнили цю ідею до програмної транзакційної пам'яті (ЅТМ). STM як і раніше знаходиться в центрі інтенсивних досліджень; зростає її підтримка для практичних реалізацій.
Характеристика
На відміну від методів блокування, що використовуються в більшості сучасних багатопоточних додатків, STM дуже оптимістична: потік завершує зміни поділюваної пам'яті без урахування того, що роблять інші потоки, і реєструє будь-яке зчитування і запис в лог. Замість того, щоб використовувати записувальний пристрій для перевірки, чи не має він негативного впливу на інші діючі операції, відповідальність передається зчитувальному пристрою, який після завершення повної транзакції перевіряє, чи не зробили інші потоки паралельно зміни в пам'яті, до якої був отриманий доступ в минулому. Ця остання операція, в якій перевіряються зміни транзакцій і яка, якщо перевірка успішна, залишається незмінною, називається фіксацією. Транзакція може припинитися в будь-який час, в результаті чого всі останні зміни будуть скасовані. Якщо транзакція не може бути здійснена через конфлікти змін, вона переривається і повторно виконується спочатку до тих пір, поки результативно не завершиться.
Перевага такого оптимістичного підходу зростає завдяки паралелізму: жодному потоку не потрібно чекати отримання доступу до ресурсу, і різні потоки можуть одночасно і безпечно модифікувати непересічні частини структури даних, які захищалися б одним локом.
Однак на практиці ЅТМ-системи програють в продуктивності дрібномодульним системам, заснованим на блокуваннях, на невеликій кількості процесорів (від 1 до 4 в залежності від програми). Це пов'язано в першу чергу з накладними витратами на підтримку лога і з часом, що витрачається на здійснення транзакцій. Але навіть у цьому випадку продуктивність відрізняється не більш, ніж в 2 рази. Прихильники STM вважають, що такі втрати виправдані концептуальними перевагами ЅТМ.
Теоретично, часова і просторова складності виконання n паралельних транзакцій в гіршому випадку - O(n). Фактичні витрати залежать від реалізації (можна скасувати транзакцію на ранній стадії, щоб уникнути накладних витрат), але завжди будуть випадки, хоч і рідкі, коли lock-алгоритми будуть мати кращу часову складність, ніж програмна транзакційна пам'ять.
Концептуальні переваги і недоліки
Також STM значно спрощує концептуальне розуміння багатопотокових програм і допомагає їх зручному супроводу, злагоджено працюючи з існуючими високорівневими абстракціями, такими як об'єкти і модулі.
Lock-програмування містить ряд відомих проблем, які часто виникають на практиці:
- Важливо пам'ятати про операції які пересікаються і часткових операціях в розділених і непов'язаних з першого погляду частинах коду — завдання дуже важке і в ньому можна зробити багато помилок.
- Воно вимагає від програмістів освоювати політику блокування, щоб уникнути тупиків (Deadlock) та інших проблем управління процесами. Така політика часто приводиться у виконання довільним чином і буває помилковою, і коли виникають проблеми, їх важко відновити і налагодити.
- Це може призвести до інверсії пріоритетів — явище, при якому високопріоритетний потік змушений очікувати низькопріоритетний потік, що має винятковий доступ до необхідного ресурсу.
Навпаки, концепція транзакційної пам'яті набагато простіша, тому що кожна транзакція може розглядатися окремо, як однопотокове обчислення. Тупики або запобігаються повністю, або дозволяються зовнішньою програмою управління транзакціями; програмісту навряд чи потрібно турбуватися про це. Інверсія пріоритетів може бути проблемою, але пріоритетні транзакції можуть перервати конфліктуючі низькопріоритетні операції, які ще не були здійснені.
З іншого боку, необхідність переривання невдалих транзакцій також накладає обмеження на їх поведінку: вони не можуть виконувати будь-які операції, які не можуть бути скасовані, у тому числі більшість вводів-виводів. Такі обмеження, як правило, на практиці долаються шляхом створення буферів, які ставлять в чергу незворотні операції і виконують їх через деякий час поза будь-якою транзакцією. У мові Хаскель це обмеження приводиться у виконання системою типів під час компіляції.
Компонувальні операції
У 2005 році Тім Харріс, Саймон Марлоу, Саймон Пейтон Джонс і [en] описали STM-систему, створену на Хаскелі, який реалізує паралелізм. Ця система дозволяє довільним атомарним операціями компонуватися в більш великі атомарні операції — корисна концепція, неможлива при lock-програмуванні. За словами авторів:
«Мабуть, найфундаментальніший недолік у тому, що lock-програми не можуть компонувати: коректні фрагменти можуть не спрацювати, пропри скомпонованість. Розглянемо, наприклад, геш-таблицю з потокобезпечними операціями вставлення і видалення. Тепер припустимо, що ми хочемо видалити один елемент з таблиці t1 і вставити його в таблицю t2, але проміжний стан (у якому жодна таблиця не містить цього елемента) не має бути видимим для інших потоків. Поки конструктор геш-таблиці не передбачить цієї потреби, просто не існує способу задовольнити цю вимогу. Загалом, операції, коректні поодинці (вставлення, видалення), не можна скомпонувати в більші коректні операції»
— Tim Harris et al., "Composable Memory Transactions", Section 2: Background, pg.2
З STM ця проблема вирішується просто: просте об'єднання двох операцій в одній транзакції перетворює операцію яка компонується в атомарну. Єдиним каменем спотикання є те, що для абонента, який не знає деталей реалізації методів компонування, неясно коли вони повинні спробувати повторно виконати транзакцію, якщо вона не проводиться. У відповідь на це, автори запропонували команду повторної спроби, яка використовує журнал транзакцій (log-файл), що генерується невдалою транзакцією для визначення нею ділянки пам'яті яка зчитується. Тоді вона знову автоматично запускає дану транзакцію, коли одна з цих ділянок пам'яті змінюється. Це ґрунтується на логіці, що транзакція не буде вести себе інакше, поки хоча б одне таке значення не змінилося.
Автори також запропонували механізм побудови альтернатив (функція абоІнакше — orElse). Він запускає одну транзакцію і, якщо транзакція робить повторну спробу, запускає другу. Якщо те ж відбувається і з другою, механізм запускає їх обидві знову, поки не відбудуться суттєві зміни. Дана функція, зіставлювана з функцією мережевого стандарту POSIX select(), дозволяє тому, хто викликає її, очікувати будь-яке з ряду подій одночасно. Вона також спрощує програмування інтерфейсів, наприклад, шляхом надання простого механізму конвертації між блокуючими і неблокуючими операціями.
Пропонована допоміжна мова
Концептуальна простота ЅТМ-систем дозволяє програмісту легко працювати з ними, використовуючи відносно простий синтаксис мови. У своїй книзі «Допоміжна мова для легких транзакцій» Тім Харріс і Кейр Фрейзер запропонували ідею використання класичної умовної критичної області (CCR) для подання транзакцій. У своїй найпростішій формі це всього лише «атомарний блок», ділянка коду, яка послідовно виконується в одиничний момент часу:
// Атомарна вставка вузла в двохзв'язний список atomic { newNode->prev = node; newNode->next = node->next; node->next->prev = newNode; node->next = newNode; }
По досягненні кінця блоку транзакція здійснюється, якщо це можливо, інакше припиняється і повторюється. Умовні критичні області також допускають умову збереження, що дозволяє транзакції очікувати виконання, поки діє її завдання.
atomic (queueSize > 0) { remove item from queue and use it }
Якщо умова не виконується, програма управління (менеджер) транзакцій буде чекати, поки не прийде інша, яка вплине на умову перш, ніж повторить спробу. Такий вільний зв'язок між виробниками і споживачами удосконалює модульний принцип порівняно з чітким сигналізуванням між потоками. Книга «Компонована операція звернення до пам'яті» пішла далі зі своєю командою повторної спроби (див. вище), яка може в будь-який час перервати транзакцію і чекати, поки не відбудеться яка-небудь зміна значення, раніше зчитаного цією операцією, перед повторенням спроби. Приклад:
atomic { if (queueSize > 0) { remove item from queue and use it } else { retry } }
Ця здатність динамічного повторення в кінці транзакції спрощує модель програмування і відкриває нові можливості.
Однією з проблем є поведінка винятків, коли вони поширюються за межі транзакцій. У праці "Компонована операція звернення до пам'яті" автори вирішили, що це має перервати транзакцію, так як виключення зазвичай вказують на несподівані помилки в мові Хаскель (з паралелізмом), але те, що цей виняток може зберігати надану інформацію та зчитувати її під час транзакції в цілях діагностики. Вони підкреслюють, що ймовірні також інші проектні рішення при інших параметрах.
Транзакційне блокування
ЅТМ може бути реалізована як алгоритм без блокувань і з блокуваннями. Є два типи блокування.
- Блокування при зіткненні операцій (Еналса, Саха і Харріса), при якому записи в пам'ять здійснюються, спочатку тимчасово блокуючи цю область пам'яті, безпосередньо записуючи значення і реєструючи їх у журналі реєстрації відкатів операцій.
- Блокування при здійсненні транзакції, яке блокує комірки пам'яті тільки під час вчинення фази.
Схема здійснення транзакції, названа «Транзакційне блокування-2» і реалізована Дайсом, Шалевим і Шавітом, використовує глобальний час. Кожна транзакція починається із зчитування поточного значення часу і зберігає його для зчитування. Потім при кожному зчитуванні і записі версія певної області пам'яті порівнюється з версією для читання, і, якщо воно більше, то транзакція скасовується. Це гарантує, що код виконається на відповідній копії пам'яті. Під час вчинення всі області читання заблоковані, і значення даної версії всіх областей пам'яті для запису і читання повторно перевіряються. Нарешті, глобальний час збільшується, нові значення запису з журналу записуються назад в пам'ять із зазначенням нової версії часу.
Все більш популярним методом управління транзакційними конфліктами в транзакційної пам'яті, особливо в ЅТМ, є [en] (ПВ). Він використовується для досягнення впорядкованості безблоковувано (тобто без блокування при конфлікті операцій і тільки з блокуванням при здійсненні транзакції) за допомогою зміни порядку здійснення транзакцій (наприклад, Рамадан і співавтори, 2009, і Жанг і співавтори, 2006). Впорядкованість є основою для коректного стану транзакційної пам'яті (при виконанні паралельних транзакцій). Вже були опубліковані десятки статей та патентів про STM із застосуванням «порядку вчинення».
«Жанг і співавтори, 2006» — патент США, який несе назву «Програмне забезпечення порядку здійснення транзакцій і управління конфліктами» (який посилається на патент США 5701480 про порядок вчинення). Розробляються різні технології та методи для застосування порядку вчинення в системі програмної транзакційної пам'яті. Система програмної транзакційної пам'яті забезпечена функцією, щоб зумовлений порядок вчинення був застосовний для безлічі операцій. Визначений порядок вчинення використовується під час виконання, щоб встановити порядок, в якому здійснювати транзакції в системі програмної транзакційної пам'яті. Процес управління конфліктами викликається, коли відбувається конфлікт між першою і другою транзакціями. Визначений порядок вчинення використовується в процесі управління конфліктами, щоб визначити, яка з транзакцій повинна виграти конфлікт і отримати дозвіл на продовження. З порядком здійснення бажана властивість впорядкованості відбувається шляхом здійснення транзакцій тільки в хронологічному порядку, сумісному з порядком по пріоритету (як визначено хронологічним порядком операцій в конфліктах)
Реалізації
SRTM було реалізовано (різної якості і стабільності) на різних мовах програмування. Таких, як:
C/C++
- TBoost.STM (formerly DracoSTM) Спільні зусилля CU-Boulder і Boost Libraries Group створили для C++ STM бібліотеку, в першу чергу автором якого є Justin E. Gottschlich і Jeremy G. Siek.
- a time-based STM і Tanger to integrate STMs з C and C++ через LLVM.
- Lightweight Transaction Library (LibLTX), реалізація для C, (автор Robert Ennals) основний акцент зроблено на ефективність. Реалізація ґрунтується на його статтях «Software Transactional Memory Should Not Be Obstruction-Free» і «Cache Sensitive Software Transactional Memory».
- LibCMT, реалізація з відкритим кодом для C, зроблена Duilio Protti і заснована на «Composable Memory Transactions». Ця реалізація також включає .
- є прототипом, який дає «atomic» ключове слово в C/C++.
- Intel STM Compiler Prototype Edition реалізація STM для C/C++ безпосередньо в компіляторі (Intel Compiler) для Linux або Windows, генеруючому 32 або 64 бітний код для процесорів Intel і AMD. Реалізує «атомне» ключове слово, а також надає способи декорації визначення функцій (declspec) для управління / дозволу на використання в «атомних» секціях.
- stmmap реалізація STM в C, заснована на поділюваній пам'яті. Призначена для спільного використання пам'яті між потоками і / або процесами (а не тільки між потоками всередині процесу) з семантикою транзакцій. В C++ реалізована багатопотокова версія даного аллокатора.
- реалізація STM в C, заснована на TL2, але з багатьма розширеннями і оптимізаціями.
- Several implementations by Tim Harris & Keir Fraser, заснована на ідеї зі статей «Language Support for Lightweight Transactions», «Practical Lock Freedom», і майбутньої неопублікованій роботі.
- RSTM University of Rochester STM написана командою вчених під керівництвом Michael L. Scott.
- G++ 4.7 вже підтримує STM для C/C++ прямо в компіляторі. Ця можливість досі числиться експериментальною, але забезпечує необхідну для тестування функціональність.
C#
- SXM, реалізація для C# Microsoft Research. Documentation, Download page[недоступне посилання з червня 2019].
- LibCMT, реалізація з відкритим кодом, (Duilio Protti) базується на «Composable Memory Transactions». Реалізація також включає .
- , .NET Software Transactional Memory, написаний повністю на C#, пропонує вкладені транзакції і навіть інтеграцію з System.Transactions.
- MikroKosmos A Verification-Oriented Model Implementation of an STM in C#.
- Clojure підтримка STM вбудована в ядро мови.
Haskell
- STM бібліотека, як сказано в «Composable Memory Transactions», є частиною Haskell Platform.
Java
- SCAT research group реалізація AtomJava.
- реалізує концепцію Versioned Boxes, запропоновану João Cachopo і António Rito Silva, членами
- є відкритим вихідним кодом для Java і .NET з розширюваною архітектурою. XSTM реалізований у вигляді бібліотеки, а також надає розширення для повідомлення про зміни, наполегливості і реплікації об'єктів.
- Deuce Середовище розробки для Java Software Transactional Memory, використовує байт-код.
- Java 1.6+ заснована на Software Transactional Memory (STM). Ця реалізація, використовує Multi Version Concurrency Control (MVCC) як паралельний механізм контролю.
- DSTM2 Sun lab's Dynamic STM бібліотека.
- ObjectFabric дистрибутив STM.
OCaml
- і одночасно бібліотека програмування OCaml, пропонує STM (originally STMLib) як модуль. Як і будь-який інший компонент у цій бібліотеці, STM модуль може бути використаний разом з VM-level threads, системою потоків і процесів.
Perl
- STM для Perl 6 був реалізований в Pugs через STM бібліотеку Glasgow Haskell Compiler.
Python
- Durus проста, але повна і швидка, STM реалізація для Python, що дозволяє використовувати STM усередині одного процесу і STM в server/multiple клієнт архітектурі. На додаток до вбудованої пам'яті формату існують і інші, наприклад Berkeley DB доступна .
- Fork of CPython with atomic locks — Armin Rigo пояснює свій патч для CPython в an email to the pypy-dev list.
- pypy-stm — надбудова над PyPy c робочої реалізацією інтерпретатора Python 2.7, підтримує одночасне виконання ниток існуючих багатопоточних додатків на різних ядрах CPU.
Scala
- ScalaSTM Легка бібліотечна STM для Scala.
- RadonSTM STM для Scala, яка була реалізована як частина проекту Activate Framework
atomic (queueSize > 0) { remove item from queue and use it }
Якщо умова не виконується, програма управління (менеджер) транзакцій буде чекати, поки не прийде інша, яка вплине на умову перш, ніж повторить спробу. Такий вільний зв'язок між виробниками і споживачами удосконалює модульний принцип порівняно з чітким сигналізуванням між потоками. Книга «Компонована операція звернення до пам'яті» пішла далі зі своєю командою повторної спроби (див. вище), яка може в будь-який час перервати транзакцію і чекати, поки не відбудеться яка-небудь зміна значення, раніше зчитаного цією операцією, перед повторенням спроби. Приклад:
ЅТМ може бути реалізована як алгоритм без блокувань і з блокуваннями. Є два типи блокування.
- Блокування при зіткненні операцій (Еналса, Саха і Харріса), при якому записи в пам'ять здійснюються, спочатку тимчасово блокуючи цю область пам'яті, безпосередньо записуючи значення і реєструючи їх у журналі реєстрації відкатів операцій.
- Блокування при здійсненні транзакції, яке блокує комірки пам'яті тільки під час вчинення фази.
З порядком здійснення бажана властивість впорядкованості відбувається шляхом здійснення транзакцій тільки в хронологічному порядку, сумісному з порядком по пріоритету (як визначено хронологічним порядком операцій в конфліктах)
Smalltalk
- GemStone/S Transactional Memory Object Server для Smalltalk.
Інші мови
- Fortress мова розроблений Sun, використовує DSTM2
- STM.NET
Примітки
- Tom Knight. Proceedings of the 1986 ACM conference on LISP and functional programming.
- Maurice Herlihy and J. Eliot B. Moss. Transactional memory: architectural support for lock-free data structures. Proceedings of the 20th annual international symposium on Computer architecture (ISCA '93). Volume 21, Issue 2, May 1993.
- Nir Shavit and Dan Touitou. Software transactional memory. Distributed Computing. Volume 10, Number 2. February 1997.
- "software transactional memory" - Google Scholar. Процитовано 10 листопада 2013.
- Simon Peyton-Jones. Programming in the Age of Concurrency: Software Transactional Memory. Channel 9. Процитовано 9 червня 2007.
- Harris, T.; Marlow, S.; ; (2005). Composable memory transactions (PDF). Proceedings of the tenth ACM SIGPLAN symposium on Principles and practice of parallel programming - PPoPP '05. с. 48. doi:10.1145/1065944.1065952. ISBN .
Посилання
- Morry Katz, PARATRAN: A transparent transaction based runtime mechanism for execution of parallel Scheme, MIT LCS, 1989
- Nir Shavit and Dan Touitou. Software Transactional Memory. Proceedings of the 14th ACM [en], pp. 204-213. August 1995. The paper originating STM.
- Maurice Herlihy, Victor Luchangco, Mark Moir, and William N. Scherer III. . Proceedings of the Twenty-Second Annual ACM SIGACT-SIGOPS [en] (PODC), 92-101. July 2003.
- Tim Harris and Keir Fraser. Language Support for Lightweight Transactions. Object-Oriented Programming, Systems, Languages, and Applications, pp. 388-402. October 2003.
- Tim Harris, Simon Marlow, Simon Peyton Jones and Maurice Herlihy. Composable Memory Transactions. ACM [en] 2005 (PPoPP'05). 2005.
- Robert Ennals. .
- Michael L. Scott et al. Lowering the Overhead of Nonblocking Software Transactional Memory gives a good introduction not only to the RSTM but also about existing STM approaches.
- Torvald Riegel and Pascal Felber and Christof Fetzer, introduces the first time-based STM.
- Dave Dice, Ori Shalev, and Nir Shavit. Transactional Locking II.
- Knight, TF, An architecture for mostly functional languages, ACM Lisp and Functional Programming Conference, August, 1986.
- Knight, TF, System and method for parallel processing with mostly functional languages, US Patent 4,825,360, April, 1989.
- Ali-Reza Adl-Tabatabai, Christos Kozyrakis, Bratin Saha, Unlocking concurrency, ACM Queue 4, 10 (December 2006), pp 24-33. Ties multicore processors and the research/interest in STM together.
- James R Larus, Ravi Rajwar, Transactional Memory, Morgan and Claypool Publishers, 2006.
- Леонід Черняк. Транзакційна пам'ять — перші кроки // «Відкриті системи» , № 04, 2007
Ця стаття потребує додаткових для поліпшення її . (березень 2017) |
Це незавершена стаття про програмування. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Cya stattya mistit pravopisni leksichni gramatichni stilistichni abo inshi movni pomilki yaki treba vipraviti Vi mozhete dopomogti vdoskonaliti cyu stattyu pogodivshi yiyi iz chinnimi movnimi standartami V komp yuternih tehnologiyah programna tranzakcijna pam yat angl software transactional memory STM yavlyaye soboyu mehanizm upravlinnya paralelizmom analogichnij mehanizmu tranzakcij baz danih dlya upravlinnya dostupom do spilno vikoristovuvanoyi pam yati v paralelnih obchislennyah Ce alternativa dlya sinhronizaciyi na osnovi blokuvannya Tranzakciya v comu konteksti ye chastinoyu kodu yakij vikonuye zchituvannya i zapis v podilyuvanu spilno vikoristovuvanu pam yat Zchituvannya i zapis logichno vidbuvayetsya v odinichnij moment chasu a promizhni stani nevidimi dlya inshih rezultativnih tranzakcij Ideya zabezpechennya tranzakcij aparatnoyu pidtrimkoyu zarodilasya v 1986 roci v roboti i patenti en Ideya otrimala publichne visvitlennya zavdyaki en i en U 1995 roci en i Den Tojtu dopovnili cyu ideyu do programnoyi tranzakcijnoyi pam yati ЅTM STM yak i ranishe znahoditsya v centri intensivnih doslidzhen zrostaye yiyi pidtrimka dlya praktichnih realizacij HarakteristikaNa vidminu vid metodiv blokuvannya sho vikoristovuyutsya v bilshosti suchasnih bagatopotochnih dodatkiv STM duzhe optimistichna potik zavershuye zmini podilyuvanoyi pam yati bez urahuvannya togo sho roblyat inshi potoki i reyestruye bud yake zchituvannya i zapis v log Zamist togo shob vikoristovuvati zapisuvalnij pristrij dlya perevirki chi ne maye vin negativnogo vplivu na inshi diyuchi operaciyi vidpovidalnist peredayetsya zchituvalnomu pristroyu yakij pislya zavershennya povnoyi tranzakciyi pereviryaye chi ne zrobili inshi potoki paralelno zmini v pam yati do yakoyi buv otrimanij dostup v minulomu Cya ostannya operaciya v yakij pereviryayutsya zmini tranzakcij i yaka yaksho perevirka uspishna zalishayetsya nezminnoyu nazivayetsya fiksaciyeyu Tranzakciya mozhe pripinitisya v bud yakij chas v rezultati chogo vsi ostanni zmini budut skasovani Yaksho tranzakciya ne mozhe buti zdijsnena cherez konflikti zmin vona pererivayetsya i povtorno vikonuyetsya spochatku do tih pir poki rezultativno ne zavershitsya Perevaga takogo optimistichnogo pidhodu zrostaye zavdyaki paralelizmu zhodnomu potoku ne potribno chekati otrimannya dostupu do resursu i rizni potoki mozhut odnochasno i bezpechno modifikuvati neperesichni chastini strukturi danih yaki zahishalisya b odnim lokom Odnak na praktici ЅTM sistemi prograyut v produktivnosti dribnomodulnim sistemam zasnovanim na blokuvannyah na nevelikij kilkosti procesoriv vid 1 do 4 v zalezhnosti vid programi Ce pov yazano v pershu chergu z nakladnimi vitratami na pidtrimku loga i z chasom sho vitrachayetsya na zdijsnennya tranzakcij Ale navit u comu vipadku produktivnist vidriznyayetsya ne bilsh nizh v 2 razi Prihilniki STM vvazhayut sho taki vtrati vipravdani konceptualnimi perevagami ЅTM Teoretichno chasova i prostorova skladnosti vikonannya n paralelnih tranzakcij v girshomu vipadku O n Faktichni vitrati zalezhat vid realizaciyi mozhna skasuvati tranzakciyu na rannij stadiyi shob uniknuti nakladnih vitrat ale zavzhdi budut vipadki hoch i ridki koli lock algoritmi budut mati krashu chasovu skladnist nizh programna tranzakcijna pam yat Konceptualni perevagi i nedolikiTakozh STM znachno sproshuye konceptualne rozuminnya bagatopotokovih program i dopomagaye yih zruchnomu suprovodu zlagodzheno pracyuyuchi z isnuyuchimi visokorivnevimi abstrakciyami takimi yak ob yekti i moduli Lock programuvannya mistit ryad vidomih problem yaki chasto vinikayut na praktici Vazhlivo pam yatati pro operaciyi yaki peresikayutsya i chastkovih operaciyah v rozdilenih i nepov yazanih z pershogo poglyadu chastinah kodu zavdannya duzhe vazhke i v nomu mozhna zrobiti bagato pomilok Vono vimagaye vid programistiv osvoyuvati politiku blokuvannya shob uniknuti tupikiv Deadlock ta inshih problem upravlinnya procesami Taka politika chasto privoditsya u vikonannya dovilnim chinom i buvaye pomilkovoyu i koli vinikayut problemi yih vazhko vidnoviti i nalagoditi Ce mozhe prizvesti do inversiyi prioritetiv yavishe pri yakomu visokoprioritetnij potik zmushenij ochikuvati nizkoprioritetnij potik sho maye vinyatkovij dostup do neobhidnogo resursu Navpaki koncepciya tranzakcijnoyi pam yati nabagato prostisha tomu sho kozhna tranzakciya mozhe rozglyadatisya okremo yak odnopotokove obchislennya Tupiki abo zapobigayutsya povnistyu abo dozvolyayutsya zovnishnoyu programoyu upravlinnya tranzakciyami programistu navryad chi potribno turbuvatisya pro ce Inversiya prioritetiv mozhe buti problemoyu ale prioritetni tranzakciyi mozhut perervati konfliktuyuchi nizkoprioritetni operaciyi yaki she ne buli zdijsneni Z inshogo boku neobhidnist pererivannya nevdalih tranzakcij takozh nakladaye obmezhennya na yih povedinku voni ne mozhut vikonuvati bud yaki operaciyi yaki ne mozhut buti skasovani u tomu chisli bilshist vvodiv vivodiv Taki obmezhennya yak pravilo na praktici dolayutsya shlyahom stvorennya buferiv yaki stavlyat v chergu nezvorotni operaciyi i vikonuyut yih cherez deyakij chas poza bud yakoyu tranzakciyeyu U movi Haskel ce obmezhennya privoditsya u vikonannya sistemoyu tipiv pid chas kompilyaciyi Komponuvalni operaciyiU 2005 roci Tim Harris Sajmon Marlou Sajmon Pejton Dzhons i en opisali STM sistemu stvorenu na Haskeli yakij realizuye paralelizm Cya sistema dozvolyaye dovilnim atomarnim operaciyami komponuvatisya v bilsh veliki atomarni operaciyi korisna koncepciya nemozhliva pri lock programuvanni Za slovami avtoriv Mabut najfundamentalnishij nedolik u tomu sho lock programi ne mozhut komponuvati korektni fragmenti mozhut ne spracyuvati propri skomponovanist Rozglyanemo napriklad gesh tablicyu z potokobezpechnimi operaciyami vstavlennya i vidalennya Teper pripustimo sho mi hochemo vidaliti odin element z tablici t1 i vstaviti jogo v tablicyu t2 ale promizhnij stan u yakomu zhodna tablicya ne mistit cogo elementa ne maye buti vidimim dlya inshih potokiv Poki konstruktor gesh tablici ne peredbachit ciyeyi potrebi prosto ne isnuye sposobu zadovolniti cyu vimogu Zagalom operaciyi korektni poodinci vstavlennya vidalennya ne mozhna skomponuvati v bilshi korektni operaciyi Tim Harris et al Composable Memory Transactions Section 2 Background pg 2 Z STM cya problema virishuyetsya prosto proste ob yednannya dvoh operacij v odnij tranzakciyi peretvoryuye operaciyu yaka komponuyetsya v atomarnu Yedinim kamenem spotikannya ye te sho dlya abonenta yakij ne znaye detalej realizaciyi metodiv komponuvannya neyasno koli voni povinni sprobuvati povtorno vikonati tranzakciyu yaksho vona ne provoditsya U vidpovid na ce avtori zaproponuvali komandu povtornoyi sprobi yaka vikoristovuye zhurnal tranzakcij log fajl sho generuyetsya nevdaloyu tranzakciyeyu dlya viznachennya neyu dilyanki pam yati yaka zchituyetsya Todi vona znovu avtomatichno zapuskaye danu tranzakciyu koli odna z cih dilyanok pam yati zminyuyetsya Ce gruntuyetsya na logici sho tranzakciya ne bude vesti sebe inakshe poki hocha b odne take znachennya ne zminilosya Avtori takozh zaproponuvali mehanizm pobudovi alternativ funkciya aboInakshe orElse Vin zapuskaye odnu tranzakciyu i yaksho tranzakciya robit povtornu sprobu zapuskaye drugu Yaksho te zh vidbuvayetsya i z drugoyu mehanizm zapuskaye yih obidvi znovu poki ne vidbudutsya suttyevi zmini Dana funkciya zistavlyuvana z funkciyeyu merezhevogo standartu POSIX select dozvolyaye tomu hto viklikaye yiyi ochikuvati bud yake z ryadu podij odnochasno Vona takozh sproshuye programuvannya interfejsiv napriklad shlyahom nadannya prostogo mehanizmu konvertaciyi mizh blokuyuchimi i neblokuyuchimi operaciyami Cya shema bula realizovana v kompilyatori movi Haskel GHC Proponovana dopomizhna movaKonceptualna prostota ЅTM sistem dozvolyaye programistu legko pracyuvati z nimi vikoristovuyuchi vidnosno prostij sintaksis movi U svoyij knizi Dopomizhna mova dlya legkih tranzakcij Tim Harris i Kejr Frejzer zaproponuvali ideyu vikoristannya klasichnoyi umovnoyi kritichnoyi oblasti CCR dlya podannya tranzakcij U svoyij najprostishij formi ce vsogo lishe atomarnij blok dilyanka kodu yaka poslidovno vikonuyetsya v odinichnij moment chasu Atomarna vstavka vuzla v dvohzv yaznij spisok atomic newNode gt prev node newNode gt next node gt next node gt next gt prev newNode node gt next newNode Po dosyagnenni kincya bloku tranzakciya zdijsnyuyetsya yaksho ce mozhlivo inakshe pripinyayetsya i povtoryuyetsya Umovni kritichni oblasti takozh dopuskayut umovu zberezhennya sho dozvolyaye tranzakciyi ochikuvati vikonannya poki diye yiyi zavdannya atomic queueSize gt 0 remove item from queue and use it Yaksho umova ne vikonuyetsya programa upravlinnya menedzher tranzakcij bude chekati poki ne prijde insha yaka vpline na umovu persh nizh povtorit sprobu Takij vilnij zv yazok mizh virobnikami i spozhivachami udoskonalyuye modulnij princip porivnyano z chitkim signalizuvannyam mizh potokami Kniga Komponovana operaciya zvernennya do pam yati pishla dali zi svoyeyu komandoyu povtornoyi sprobi div vishe yaka mozhe v bud yakij chas perervati tranzakciyu i chekati poki ne vidbudetsya yaka nebud zmina znachennya ranishe zchitanogo ciyeyu operaciyeyu pered povtorennyam sprobi Priklad atomic if queueSize gt 0 remove item from queue and use it else retry Cya zdatnist dinamichnogo povtorennya v kinci tranzakciyi sproshuye model programuvannya i vidkrivaye novi mozhlivosti Odniyeyu z problem ye povedinka vinyatkiv koli voni poshiryuyutsya za mezhi tranzakcij U praci Komponovana operaciya zvernennya do pam yati avtori virishili sho ce maye perervati tranzakciyu tak yak viklyuchennya zazvichaj vkazuyut na nespodivani pomilki v movi Haskel z paralelizmom ale te sho cej vinyatok mozhe zberigati nadanu informaciyu ta zchituvati yiyi pid chas tranzakciyi v cilyah diagnostiki Voni pidkreslyuyut sho jmovirni takozh inshi proektni rishennya pri inshih parametrah Tranzakcijne blokuvannyaЅTM mozhe buti realizovana yak algoritm bez blokuvan i z blokuvannyami Ye dva tipi blokuvannya Blokuvannya pri zitknenni operacij Enalsa Saha i Harrisa pri yakomu zapisi v pam yat zdijsnyuyutsya spochatku timchasovo blokuyuchi cyu oblast pam yati bezposeredno zapisuyuchi znachennya i reyestruyuchi yih u zhurnali reyestraciyi vidkativ operacij Blokuvannya pri zdijsnenni tranzakciyi yake blokuye komirki pam yati tilki pid chas vchinennya fazi Shema zdijsnennya tranzakciyi nazvana Tranzakcijne blokuvannya 2 i realizovana Dajsom Shalevim i Shavitom vikoristovuye globalnij chas Kozhna tranzakciya pochinayetsya iz zchituvannya potochnogo znachennya chasu i zberigaye jogo dlya zchituvannya Potim pri kozhnomu zchituvanni i zapisi versiya pevnoyi oblasti pam yati porivnyuyetsya z versiyeyu dlya chitannya i yaksho vono bilshe to tranzakciya skasovuyetsya Ce garantuye sho kod vikonayetsya na vidpovidnij kopiyi pam yati Pid chas vchinennya vsi oblasti chitannya zablokovani i znachennya danoyi versiyi vsih oblastej pam yati dlya zapisu i chitannya povtorno pereviryayutsya Nareshti globalnij chas zbilshuyetsya novi znachennya zapisu z zhurnalu zapisuyutsya nazad v pam yat iz zaznachennyam novoyi versiyi chasu Vse bilsh populyarnim metodom upravlinnya tranzakcijnimi konfliktami v tranzakcijnoyi pam yati osoblivo v ЅTM ye en PV Vin vikoristovuyetsya dlya dosyagnennya vporyadkovanosti bezblokovuvano tobto bez blokuvannya pri konflikti operacij i tilki z blokuvannyam pri zdijsnenni tranzakciyi za dopomogoyu zmini poryadku zdijsnennya tranzakcij napriklad Ramadan i spivavtori 2009 i Zhang i spivavtori 2006 Vporyadkovanist ye osnovoyu dlya korektnogo stanu tranzakcijnoyi pam yati pri vikonanni paralelnih tranzakcij Vzhe buli opublikovani desyatki statej ta patentiv pro STM iz zastosuvannyam poryadku vchinennya Zhang i spivavtori 2006 patent SShA yakij nese nazvu Programne zabezpechennya poryadku zdijsnennya tranzakcij i upravlinnya konfliktami yakij posilayetsya na patent SShA 5701480 pro poryadok vchinennya Rozroblyayutsya rizni tehnologiyi ta metodi dlya zastosuvannya poryadku vchinennya v sistemi programnoyi tranzakcijnoyi pam yati Sistema programnoyi tranzakcijnoyi pam yati zabezpechena funkciyeyu shob zumovlenij poryadok vchinennya buv zastosovnij dlya bezlichi operacij Viznachenij poryadok vchinennya vikoristovuyetsya pid chas vikonannya shob vstanoviti poryadok v yakomu zdijsnyuvati tranzakciyi v sistemi programnoyi tranzakcijnoyi pam yati Proces upravlinnya konfliktami viklikayetsya koli vidbuvayetsya konflikt mizh pershoyu i drugoyu tranzakciyami Viznachenij poryadok vchinennya vikoristovuyetsya v procesi upravlinnya konfliktami shob viznachiti yaka z tranzakcij povinna vigrati konflikt i otrimati dozvil na prodovzhennya Z poryadkom zdijsnennya bazhana vlastivist vporyadkovanosti vidbuvayetsya shlyahom zdijsnennya tranzakcij tilki v hronologichnomu poryadku sumisnomu z poryadkom po prioritetu yak viznacheno hronologichnim poryadkom operacij v konfliktah RealizaciyiSRTM bulo realizovano riznoyi yakosti i stabilnosti na riznih movah programuvannya Takih yak C C TBoost STM formerly DracoSTM Spilni zusillya CU Boulder i Boost Libraries Group stvorili dlya C STM biblioteku v pershu chergu avtorom yakogo ye Justin E Gottschlich i Jeremy G Siek a time based STM i Tanger to integrate STMs z C and C cherez LLVM Lightweight Transaction Library LibLTX realizaciya dlya C avtor Robert Ennals osnovnij akcent zrobleno na efektivnist Realizaciya gruntuyetsya na jogo stattyah Software Transactional Memory Should Not Be Obstruction Free i Cache Sensitive Software Transactional Memory LibCMT realizaciya z vidkritim kodom dlya C zroblena Duilio Protti i zasnovana na Composable Memory Transactions Cya realizaciya takozh vklyuchaye ye prototipom yakij daye atomic klyuchove slovo v C C Intel STM Compiler Prototype Edition realizaciya STM dlya C C bezposeredno v kompilyatori Intel Compiler dlya Linux abo Windows generuyuchomu 32 abo 64 bitnij kod dlya procesoriv Intel i AMD Realizuye atomne klyuchove slovo a takozh nadaye sposobi dekoraciyi viznachennya funkcij declspec dlya upravlinnya dozvolu na vikoristannya v atomnih sekciyah stmmap realizaciya STM v C zasnovana na podilyuvanij pam yati Priznachena dlya spilnogo vikoristannya pam yati mizh potokami i abo procesami a ne tilki mizh potokami vseredini procesu z semantikoyu tranzakcij V C realizovana bagatopotokova versiya danogo allokatora realizaciya STM v C zasnovana na TL2 ale z bagatma rozshirennyami i optimizaciyami Several implementations by Tim Harris amp Keir Fraser zasnovana na ideyi zi statej Language Support for Lightweight Transactions Practical Lock Freedom i majbutnoyi neopublikovanij roboti RSTM University of Rochester STM napisana komandoyu vchenih pid kerivnictvom Michael L Scott G 4 7 vzhe pidtrimuye STM dlya C C pryamo v kompilyatori Cya mozhlivist dosi chislitsya eksperimentalnoyu ale zabezpechuye neobhidnu dlya testuvannya funkcionalnist C SXM realizaciya dlya C Microsoft Research Documentation Download page nedostupne posilannya z chervnya 2019 LibCMT realizaciya z vidkritim kodom Duilio Protti bazuyetsya na Composable Memory Transactions Realizaciya takozh vklyuchaye NET Software Transactional Memory napisanij povnistyu na C proponuye vkladeni tranzakciyi i navit integraciyu z System Transactions MikroKosmos A Verification Oriented Model Implementation of an STM in C Clojure pidtrimka STM vbudovana v yadro movi Haskell STM biblioteka yak skazano v Composable Memory Transactions ye chastinoyu Haskell Platform Java SCAT research group realizaciya AtomJava realizuye koncepciyu Versioned Boxes zaproponovanu Joao Cachopo i Antonio Rito Silva chlenami ye vidkritim vihidnim kodom dlya Java i NET z rozshiryuvanoyu arhitekturoyu XSTM realizovanij u viglyadi biblioteki a takozh nadaye rozshirennya dlya povidomlennya pro zmini napoleglivosti i replikaciyi ob yektiv Deuce Seredovishe rozrobki dlya Java Software Transactional Memory vikoristovuye bajt kod Java 1 6 zasnovana na Software Transactional Memory STM Cya realizaciya vikoristovuye Multi Version Concurrency Control MVCC yak paralelnij mehanizm kontrolyu DSTM2 Sun lab s Dynamic STM biblioteka ObjectFabric distributiv STM OCaml i odnochasno biblioteka programuvannya OCaml proponuye STM originally STMLib yak modul Yak i bud yakij inshij komponent u cij biblioteci STM modul mozhe buti vikoristanij razom z VM level threads sistemoyu potokiv i procesiv Perl STM dlya Perl 6 buv realizovanij v Pugs cherez STM biblioteku Glasgow Haskell Compiler Python Durus prosta ale povna i shvidka STM realizaciya dlya Python sho dozvolyaye vikoristovuvati STM useredini odnogo procesu i STM v server multiple kliyent arhitekturi Na dodatok do vbudovanoyi pam yati formatu isnuyut i inshi napriklad Berkeley DB dostupna Fork of CPython with atomic locks Armin Rigo poyasnyuye svij patch dlya CPython v an email to the pypy dev list pypy stm nadbudova nad PyPy c robochoyi realizaciyeyu interpretatora Python 2 7 pidtrimuye odnochasne vikonannya nitok isnuyuchih bagatopotochnih dodatkiv na riznih yadrah CPU Scala ScalaSTM Legka bibliotechna STM dlya Scala RadonSTM STM dlya Scala yaka bula realizovana yak chastina proektu Activate Framework atomic queueSize gt 0 remove item from queue and use it Yaksho umova ne vikonuyetsya programa upravlinnya menedzher tranzakcij bude chekati poki ne prijde insha yaka vpline na umovu persh nizh povtorit sprobu Takij vilnij zv yazok mizh virobnikami i spozhivachami udoskonalyuye modulnij princip porivnyano z chitkim signalizuvannyam mizh potokami Kniga Komponovana operaciya zvernennya do pam yati pishla dali zi svoyeyu komandoyu povtornoyi sprobi div vishe yaka mozhe v bud yakij chas perervati tranzakciyu i chekati poki ne vidbudetsya yaka nebud zmina znachennya ranishe zchitanogo ciyeyu operaciyeyu pered povtorennyam sprobi Priklad ЅTM mozhe buti realizovana yak algoritm bez blokuvan i z blokuvannyami Ye dva tipi blokuvannya Blokuvannya pri zitknenni operacij Enalsa Saha i Harrisa pri yakomu zapisi v pam yat zdijsnyuyutsya spochatku timchasovo blokuyuchi cyu oblast pam yati bezposeredno zapisuyuchi znachennya i reyestruyuchi yih u zhurnali reyestraciyi vidkativ operacij Blokuvannya pri zdijsnenni tranzakciyi yake blokuye komirki pam yati tilki pid chas vchinennya fazi Z poryadkom zdijsnennya bazhana vlastivist vporyadkovanosti vidbuvayetsya shlyahom zdijsnennya tranzakcij tilki v hronologichnomu poryadku sumisnomu z poryadkom po prioritetu yak viznacheno hronologichnim poryadkom operacij v konfliktah Smalltalk GemStone S Transactional Memory Object Server dlya Smalltalk Inshi movi Fortress mova rozroblenij Sun vikoristovuye DSTM2 STM NETPrimitkiTom Knight Proceedings of the 1986 ACM conference on LISP and functional programming Maurice Herlihy and J Eliot B Moss Transactional memory architectural support for lock free data structures Proceedings of the 20th annual international symposium on Computer architecture ISCA 93 Volume 21 Issue 2 May 1993 Nir Shavit and Dan Touitou Software transactional memory Distributed Computing Volume 10 Number 2 February 1997 software transactional memory Google Scholar Procitovano 10 listopada 2013 Simon Peyton Jones Programming in the Age of Concurrency Software Transactional Memory Channel 9 Procitovano 9 chervnya 2007 Harris T Marlow S 2005 Composable memory transactions PDF Proceedings of the tenth ACM SIGPLAN symposium on Principles and practice of parallel programming PPoPP 05 s 48 doi 10 1145 1065944 1065952 ISBN 1595930809 PosilannyaMorry Katz PARATRAN A transparent transaction based runtime mechanism for execution of parallel Scheme MIT LCS 1989 Nir Shavit and Dan Touitou Software Transactional Memory Proceedings of the 14th ACM en pp 204 213 August 1995 The paper originating STM Maurice Herlihy Victor Luchangco Mark Moir and William N Scherer III Proceedings of the Twenty Second Annual ACM SIGACT SIGOPS en PODC 92 101 July 2003 Tim Harris and Keir Fraser Language Support for Lightweight Transactions Object Oriented Programming Systems Languages and Applications pp 388 402 October 2003 Tim Harris Simon Marlow Simon Peyton Jones and Maurice Herlihy Composable Memory Transactions ACM en 2005 PPoPP 05 2005 Robert Ennals Michael L Scott et al Lowering the Overhead of Nonblocking Software Transactional Memory gives a good introduction not only to the RSTM but also about existing STM approaches Torvald Riegel and Pascal Felber and Christof Fetzer introduces the first time based STM Dave Dice Ori Shalev and Nir Shavit Transactional Locking II Knight TF An architecture for mostly functional languages ACM Lisp and Functional Programming Conference August 1986 Knight TF System and method for parallel processing with mostly functional languages US Patent 4 825 360 April 1989 Ali Reza Adl Tabatabai Christos Kozyrakis Bratin Saha Unlocking concurrency ACM Queue 4 10 December 2006 pp 24 33 Ties multicore processors and the research interest in STM together James R Larus Ravi Rajwar Transactional Memory Morgan and Claypool Publishers 2006 Leonid Chernyak Tranzakcijna pam yat pershi kroki Vidkriti sistemi 04 2007 Cya stattya potrebuye dodatkovih posilan na dzherela dlya polipshennya yiyi perevirnosti Bud laska dopomozhit udoskonaliti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Zvernitsya na storinku obgovorennya za poyasnennyami ta dopomozhit vipraviti nedoliki Material bez dzherel mozhe buti piddano sumnivu ta vilucheno berezen 2017 Ce nezavershena stattya pro programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi