Распределенные системы Курсовая теория Информатика

Курсовая теория на тему Критерии корректности потокобезопасных структур данных

  • Оформление работы
  • Список литературы по ГОСТу
  • Соответствие методическим рекомендациям
  • И еще 16 требований ГОСТа,
    которые мы проверили
Нажимая на кнопку, я даю согласие
на обработку персональных данных
Фрагмент работы для ознакомления
 

Содержание:

 

Введение 3
1. Принципы разработки потокобезопасной среды данных 4
1.1. Сущность и содержание понятия «Thread-Safe» 4
1.2. Специфика разработки потокобезопасной среды 8
2. Критерии определения корректности построения потокобезопасной структуры данных 14
2.1. Особенности определения корректности потокобезопасной структуры 14
2.2. Условия гонки и корректность потокобезопасности 20
Заключение 24
Список использованной литературы 26

  

Введение:

 


Введение
Написание параллельного кода – непростая задача, а проверка его корректности – задача еще сложнее. Несмотря на то, что Java предоставляет обширную поддержку многопоточности и синхронизации на уровне языка и API, на деле же оказывается, что написание корректного многопоточного Java-кода зависит от опыта и усердности конкретного программиста. Единственная цель использования параллелизма – создание масштабируемых и быстрых приложений, но при этом всегда следует помнить, что скорость не должна становиться помехой корректности. Безопасность потоков подразумевает, как правило, что несколько потоков могут записывать/считывать данные в одном объекте без ошибок несоответствия памяти. В многопоточной программе программа с потоковой безопасностью не вызывает побочные эффекты для общих данных. В компьютерном программировании поточно-безопасный описывает часть программы или подпрограмму, которая может быть вызвана из нескольких потоков программирования без нежелательного взаимодействия между потоками. Нить в данном случае — это экземпляр программы, выполняемой от имени какого-либо пользователя или процесса.
Целью данной работы является изучение ключевых критериев корректности потокобезопасных структур данных.
Задачи работы:
• Изучить принципы разработки потокобезопасной среды данных,
• Рассмотреть критерии определения корректности построения потокобезопасной структуры данных.
Объектом исследования в данной работе является процесс разработки потокобезопасной структуры данных.
Предмет исследования – критерии определения корректности потокбезопасности структуры данных. 

Не хочешь рисковать и сдавать то, что уже сдавалось?!
Закажи оригинальную работу - это недорого!

Заключение:

 

Исходя из рассмотренного в работе материала, можно сделать ряд выводов:
1) Безопасность потоков гарантирует, что, когда поток изменяет или читает общие данные, ни один другой поток не может получить к нему доступ таким образом, который изменяет данные. Если ваш код зависит от определенного порядка выполнения для правильности, тогда вам понадобятся другие механизмы синхронизации, помимо тех, которые необходимы для обеспечения безопасности потоков.
2) Создание потокобезопасных методов очень сложно в нетривиальных случаях. И существует довольно много техник. В Java вы можете отметить метод как синхронизированный, это означает, что только один поток может выполнить этот метод в данный момент времени. Остальные потоки ждут своей очереди. Это делает метод потокобезопасным, но если есть много работы, которую нужно сделать в методе, то это отнимает много времени. Другой метод заключается в том, чтобы «отметить только небольшую часть метода как синхронизированную», создав блокировку или семафор и зафиксировав эту небольшую часть (обычно называемую критической секцией).
Необходимость соответствия критерию потоковой безопасности имеется в тех случаях, когда средство разработки или веб-сервер одновременно запускает несколько потоков выполнения для разных запросов. В потокобезопасной структуре данных бинарный может работать в контексте многопоточного веб-сервера. Потокобезопасность работает путем создания копии локального хранилища в каждом потоке, чтобы данные не сталкивались с другим потоком.
3) Одним из ключевых факторов корректности потокобезопасных структур данных является их реентерабельность. Потокобезопасная функция может быть вызвана одновременно из разных потоков, даже когда вызовы используют разделяемые данные, поскольку все обращения к разделяемым данным упорядочены.
Реентерабельная функция, в свою очередь, может быть вызвана одновременно из нескольких потоков, но только если каждый вызов использует свои собственные данные. Исходя из этого, можно говорить о том, что потокобезопасная функция всегда реентерабельна, но реентерабельная функция не всегда потокобезопасна. В более широком смысле, класс называется реентерабельным, если его функции-члены могут быть безопасно вызваны из нескольких потоков, пока каждый поток использует свой отдельный экземпляр класса. Класс является потокобезопасным, если его функции-члены могут быть безопасно вызваны из нескольких потоков, даже если все потоки используют один и тот же экземпляр класса.
Еще один важный критерий корректности структуры потокобезопасных данных является их атомарность (непрерывность). В программировании атомарное действие является тем, которое эффективно происходит внезапно. В середине не может остановиться атомарное действие: это или происходит полностью, или это не происходит вообще. Никакие побочные эффекты атомарного действия не видимы, пока действие не полно. 

 

Фрагмент текста работы:

 

1. Принципы разработки потокобезопасной среды данных
1.1. Сущность и содержание понятия «Thread-Safe»
Существует несколько типов потоков в Java и C+ :
• Цикл обработки событий (Event Loop) — главный поток, запускающий cppcms::service::run() потоков.
• Потоковый пул (Thread Pool) — специальный пул потоков, в котором выполняются все синхронные запросы.
• Некоторые фоновые потоки — вспомогательные потоки, которые в основном малоинтересны.
Сразу после запуска любого средства разработки, все синхронные приложения начинают выполняться в потоковом пуле.
Если синхронное приложение хочет выполнить какую-либо операцию в цикле обработки событий, например, взаимодействовать с некоторым асинхронным приложением передачей каких-нибудь данных или передачей ему своего HTTP-контекста, оно должно сделать это с помощью метода cppcms::service::post() и соответствующего обработчика исполнения. Этот обработчик будет передан в очередь цикла обработки событий и выполнен в его потоке.
Если асинхронное приложение или любой другой объект, работающий в цикле обработки событий хочет выполнить какую-либо продолжительную работу, блокирующую или тяжелую операцию, оно может сделать это передачей обработчика исполнения в потоковый пул.
Стоит учитывать тот факт, что как только работа будет завершена, обработчик должен уведомить о своем завершении, «отпостив» какой-либо обработчик в цикл обработки событий так же, как описано выше. Различные приложения никогда не должны получать доступ к своим внутренним состояниям непосредственно, поскольку это не может считаться это небезопасным.
Энтони Уильямс выражает мнение о том, что потокобезопасность означает, что метод или экземпляр класса могут использоваться несколькими потоками одновременно без каких-либо проблем .

Важно! Это только фрагмент работы для ознакомления
Скачайте архив со всеми файлами работы с помощью формы в начале страницы