Обзор

Введение

Boost.Thread позволяет С++ программистам реализовывать различные, асинхронные, независимые потоки выполнения. Каждый поток имеет свои собственные машинные состояния, включая счетчик программных инструкций и регистры. Программы которые реализованные как различные потоки называют многопоточные программы, что бы отличать их от традиционных однопоточных программ. Глоссарий дает более полное описание многопоточной среды выполнения.

Многопоточность дает некоторые преимуществa:

  • Программы которые хотят продолжать отвечать на запросы, при ожидание внешних событий, могут поместить блокирующие операции в отдельный поток. Многопоточность, как правило,абсолютно подходит для таких программ.
  • Хорошо спроектированные многопоточные программы могут исполнятся быстрее чем однопоточные на многопроцессорных системах. Но плохо спроектированные многопоточные программы часто гораздо медленнее однопоточных программ.
  • Проектирование некоторых программ может быть проще, если использовать многопоточность. В конце концов, наш мир асинхронен!

Предупреждения

Основной анализ

Кроме ошибок, которые могут быть в однопоточной программе, многопоточные программы могут содержать дополнительные ошибки:

Каждая многопоточная программа должна проектироваться аккуратно, что бы избежать этих ошибок. Это не редкие и не экзотические ошибки - они фактически гарантировано появятся, пока код не будет спроектирован должным образом. Проблема приоритетов(Priority failures) бывает реже - но она не менее серьезная.

Boost.Thread спроектирован так, что бы попытаться минимизировать эти ошибки, но они все равно будут, пока программист сам не позаботится о их удалении.

см. также Заметки реализации(Implementation Notes) для дополнительного, реализация-зависимого анализа

Взгляд на тестирование и отладку

Многопоточные программы недетерминированные. Другими словами, одна и та же программа с одними и теми же входными данными может исполняться каждый раз по разному. Это может сделать тестирование и отладку страшно сложными:

  • Ошибки часто не повторяются.
  • Эффект отладки может сильно искажать результаты, полученные в неотладочном варианте.(Probe effect causes debuggers to produce very different results from non-debug uses.)
  • Дебагер должен поддерживать отображение состояние потоков.
  • Тестирование на однопроцессорной системе может не выявить серьезных ошибок, которые могут случиться при использование многопроцессорных систем, и visa versa FIXME. В тесты надо включать различное количество процессоров.
  • Для программ которые создают различное число потоков для работы, тесты которые не проходят все возможные варианты могут пропустить серьезные ошибки.

Начало работы

Несмотря на то, что могло показаться, что многопоточные программы посути своей ненадежны, существует много надежных многопоточных программ. Известны многопоточные техники, которые делаю программы надежными.

Паттерны проектирования для надежных многопоточных программ, включая важный паттерн монитор, представлены в Design patterns for reliable multithreaded programs, including the important monitor pattern, are presented in Pattern-Oriented Software Architecture Volume 2 - Patterns for Concurrent and Networked Objects [SchmidtStalRohnertBuschmann]. Many important multithreading programming considerations (independent of threading library) are discussed in Programming with POSIX Threads [Butenhof97].

Doing some reading before attempting multithreaded designs will give you a head start toward reliable multithreaded programs.

Использование стандартной библиотеки C++ в многопоточных программах

Общие гарантии для всех компонент Boost.Thread

 
doc/cpp/boost/thread.txt · Последнее изменение: d.m.Y H:i — большой
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki