Читать онлайн «Параллельное программирование на С++ в действии. Практика разработки многопоточных программ»
Автор Энтони Уильямс
Параллельное программирование на С++ в действии
Практика разработки многопоточных программ
С идеей многопоточного программирования я столкнулся на своей первой работе после окончания колледжа. Мы занимались приложением, которое должно было помещать входные записи в базу данных. Данных было много, но все они были независимы и требовали значительной предварительной обработки. Чтобы задействовать всю мощь нашего десятипроцессорного компьютера UltraSPARC, мы организовали несколько потоков, каждый из которых обрабатывал свою порцию входных данных. Код был написан на языке С++, с использованием потоков POSIX. Ошибок мы наделали кучу — многопоточность для всех была внове — но до конца все-таки добрались. Именно во время работы над этим проектом я впервые услыхал о комитете по стандартизации С++ и о недавно опубликованном стандарте языка С++.
С тех мой интерес к многопоточному программированию и параллелизму не затухает. Там, где другим видятся трудности и источник разнообразных проблем, я нахожу мощный инструмент, который позволяет программе использовать всё наличное оборудование и в результате работать быстрее. Позднее я научился применять эти идеи и при наличии всего одного процессора или ядра, чтобы улучшить быстроту реакции и повысить производительность, — благодаря тому, что одновременная работа нескольких потоков дает программе возможность не простаивать во время таких длительных операций, как ввод/вывод.
Тем временем интерес к С++ свел меня с членами Ассоциации пользователей С и С++ (ACCU), а затем с членами комиссии по стандартизации С++ при Институте стандартов Великобритании (BSI) и разработчиками библиотек Boost. Я с интересом наблюдал за началом разработки библиотеки многопоточности Boost, а когда автор забросил проект, я воспользовался шансом перехватить инициативу. С тех пор разработка и сопровождение библиотеки Boost Thread Library лежит в основном на мне.
По мере того как в работе комитета по стандартизации С++ наметился сдвиг от исправления дефектов в существующем стандарте в сторону выработки предложений для нового стандарта (получившего условное название С++0х в надежде, что его удастся завершить до 2009 года, и официально названного С++11, так как он наконец был опубликован в 2011 году), я стал принимать более активное участие в деятельности BSI и даже вносить собственные предложения. Когда стало ясно, что многопоточность стоит на повестке дня, я по-настоящему встрепенулся — многие вошедшие в стандарт предложения по многопоточности и параллелизму написаны как мной самим, так и в соавторстве с коллегами. Я считаю большой удачей, что таким образом удалось совместить две основных сферы моих интересов в области программирования — язык С++ и многопоточность.
В этой книге, опирающейся на весь мой опыт работы с С++ и многопоточностью, я ставил целью научить других программистов, как безопасно и эффективно пользоваться библиотекой С++11 Thread Library. Надеюсь, что мне удастся заразить читателей своим энтузиазмом.
Параллельное программирование на С++ в действии. Практика разработки многопоточных программ
Автор: | Энтони Д Уильямс |
Перевод: | А. А. Слинкин |
Жанр: | Программирование |
Год: | 2012 |
ISBN: | 978-5-94074-448-1 |
В наши дни компьютеры с несколькими многоядерными процессорами стали нормой. Стандарт С++11 языка С++ предоставляет развитую поддержку многопоточности в приложениях. Поэтому, чтобы сохранять конкурентоспособность, вы должны овладеть принципами и приемами их разработки, а также новыми средствами языка, относящимися к параллелизму.
Книга «Параллельное программирование на С++ в действии» не предполагает предварительных знаний в этой области. Вдумчиво читая ее, вы научитесь писать надежные и элегантные многопоточные программы на С++11. Вы узнаете о том, что такое потоковая модель памяти, и о том, какие средства поддержки многопоточности, в том числе запуска и синхронизации потоков, имеются в стандартной библиотеке. Попутно вы познакомитесь с различными нетривиальными проблемами программирования в условиях параллелизма.
С идеей многопоточного программирования я столкнулся на своей первой работе после окончания колледжа. Мы занимались приложением, которое должно было помещать входные записи в базу данных. Данных было много, но все они были независимы и требовали значительной предварительной обработки. Чтобы задействовать всю мощь нашего десятипроцессорного компьютера UltraSPARC, мы организовали несколько потоков, каждый из которых обрабатывал свою порцию входных данных. Код был написан на языке С++, с использованием потоков POSIX. Ошибок мы наделали кучу — многопоточность для всех была внове — но до конца все-таки добрались. Именно во время работы над этим проектом я впервые услыхал о комитете по стандартизации С++ и о недавно опубликованном стандарте языка С++.
Параллельное программирование на С++ в действии. Практика разработки многопоточных программ скачать pdf бесплатно
Это знаменитый бестселлер, который научит вас использовать власть массового сотрудничества и покажет, как применять викиномику в вашем бизнесе. Переведенная более чем на двадцать языков и неоднократно номинированная на звание лучшей бизнес-книги, «Викиномика» стала обязательным чтением для деловых людей во всем мире. Она разъясняет, как массовое сотрудничество происходит не только на сайтах Wikipedia и YouTube, но и в традиционных компаниях, использующих технологии для того, чтобы вдохнуть новую жизнь в свои предприятия.
Дон Тапскотт и Энтони Уильямс раскрывают принципы викиномики и рассказывают потрясающие истории о том, как массы людей (как за деньги, так и добровольно) создают новости, изучают геном человека, создают ремиксы любимой музыки, находят лекарства от болезней, редактируют школьные учебники, изобретают новую косметику, пишут программное обеспечение и даже строят мотоциклы.
Знания, ресурсы и вычислительные способности миллиардов людей самоорганизуются и превращаются в новую значительную коллективную силу, действующую согласованно и управляемую с помощью блогов, вики, чатов, сетей равноправных партнеров и личные трансляции. Сеть создается заново с тем, чтобы впервые предоставить миру глобальную платформу для сотрудничества
1 РАЗРАБОТАН Всероссийским научно-исследовательским институтом стандартизации (ВНИИстандарт) Госстандарта России
ВНЕСЕН Техническим комитетом по стандартизации ТК 22 «Информационная технология»
2 ПРИНЯТ И ВВЕДЕН В ДЕЙСТВИЕ Постановлением Госстандарта России от 23 декабря 1999 г. № 675-ст
3 Настоящий стандарт содержит полный аутентичный текст международного стандарта ИСО/МЭК 12207-95 «Информационная технология. Процессы жизненного цикла программных средств»
Стандарт подготовлен на основе применения аутентичного текста международного стандарта ИСО/МЭК 9126-91 «Информационная технология. Оценка программной продукции. Характеристики качества и руководства по их применению»
Information technology. Software product evaluation. Quality characteristics and guidelines for their use.
Параллельное программирование на C++ в действии, практика разработки многопоточных программ, Уильямс Э., 2012
К сожалению, на данный момент у нас невозможно бесплатно скачать полный вариант книги.
Но вы можете попробовать скачать полный вариант, купив у наших партнеров электронную книгу здесь, если она у них есть наличии в данный момент.
Также можно купить бумажную версию книги здесь.
Параллельное программирование на C++ в действии, практика разработки многопоточных программ, Уильямс Э., 2012.
В наши дни компьютеры с несколькими многоядерными процессорами стали нормой. Стандарт C++11 языка C++ предоставляет развитую поддержку многопоточности в приложениях. Поэтому, чтобы сохранять конкурентоспособность, вы должны овладеть принципами и приемами их разработки, а также новыми средствами языка, относящимися к параллелизму
Книга «Параллельное программирование на C++ в действии» не предполагает предварительных знаний в этой области. Вдумчиво читая ее, вы научитесь писать надежные и элегантные многопоточные программы на С++11. Вы узнаете о том, что такое потоковая модель памяти, и о том, какие средства поддержки многопоточности, в том числе запуска и синхронизации потоков, имеются в стандартной библиотеке. Попутно вы познакомитесь с различными нетривиальными проблемами программирования в условиях
Что такое параллелизм?
ОГЛАВЛЕНИЕ.
Предисловие.
Благодарности.
Об этой книге.
Об иллюстрации на обложке.
ГЛАВА 1. Здравствуй, параллельный мир!
ГЛАВА 2. Управление потоками.
ГЛАВА 3. Разделение данных между потоками
ГЛАВА 4. Синхронизация параллельных операций.
ГЛАВА 5. Модель памяти C++ и атомарные операции.
ГЛАВА 6. Проектирование параллельных структур данных с блокировками.
ГЛАВА 7. Проектирование параллельных структур данных без блокировок.
ГЛАВА 8. Проектирование параллельных программ.
ГЛАВА 9. Продвинутое управление потоками.
ГЛАВА 10. Тестирование и отладка многопоточных приложений.
Приложения.
РЕСУРСЫ.
ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ.
По кнопкам выше и ниже «Купить бумажную книгу» и по ссылке «Купить» можно купить эту книгу с доставкой по всей России и похожие книги по самой лучшей цене в бумажном виде на сайтах официальных интернет магазинов Лабиринт, Озон, Буквоед, Читай-город, Литрес, My-shop, Book24, Books.ru.
По кнопке «Найти похожие материалы на других сайтах» можно найти похожие материалы на других сайтах.
On the buttons above and below you can buy the book in official online stores Labirint, Ozon and others. Also you can search related and similar materials on other sites.
atomic *, integral-type) noexcept;
volatile atomic *, integral-type, memory_order)
atomic *, integral-type, memory_order) noexcept;
volatile atomic *, integral-type) noexcept;
atomic *, integral-type) noexcept;
integral-type, memory_order) noexcept;
atomic *, integral-type, memory_order) noexcept;
volatile const atomic *) noexcept;
const atomic *) noexcept;
volatile const atomic *, memory_order) noexcept;
const atomic *, memory_order) noexcept;
volatile atomic *, integral-type * old_value,
integral-type new_value) noexcept;
integral-type * old_value, integral-type new_value) noexcept;
integral-type * old_value, integral-type new_value,
memory_order failure_order) noexcept;
integral-type * old_value, integral-type new_value,
memory_order failure_order) noexcept;
integral-type * old_value, integral-type new_value) noexcept;
integral-type * old_value, integral-type new_value) noexcept;
integral-type * old_value, integral-type new_value,
memory_order failure_order) noexcept;
integral-type * old_value, integral-type new_value,
memory_order failure_order) noexcept;
volatile atomic *, integral-type) noexcept;
atomic *, integral-type) noexcept;
volatile atomic *, integral-type,
atomic *, integral-type, memory_order) noexcept;
volatile atomic *, integral-type) noexcept;
atomic *, integral-type) noexcept;
integral-type, memory_order) noexcept;
atomic *, integral-type, memory_order) noexcept;
volatile atomic *, integral-type) noexcept;
atomic *, integral-type) noexcept;
integral-type, memory_order) noexcept;
atomic *, integral-type, memory_order) noexcept;
volatile atomic *, integral-type) noexcept;
atomic *, integral-type) noexcept;
integral-type, memory_order) noexcept;
atomic *, integral-type, memory_order) noexcept;
volatile atomic *, integral-type) noexcept;
atomic *, integral-type) noexcept;
integral-type, memory_order) noexcept;
atomic *, integral-type, memory_order) noexcept;
Те операции, которые предоставляются также основным шаблоном (см. D.3.8), имеют точно такую же семантику.
STD::ATOMIC ::FETCH_ADD, ФУНКЦИЯ-ЧЛЕН
Атомарно загружает значение и заменяет его суммой его самого и аргумента i.
integral-type i, memory_order order = memory_order_seq_cst)
integral-type i, memory_order order = memory_order_seq_cst)
Атомарно возвращает прежнее значение *this и сохраняет в *this значение old-value + i.
Значение *this непосредственно перед сохранением.
Примечание. Это атомарная операция чтения-модификации-записи для ячейки памяти, содержащей *this.
STD::ATOMIC_FETCH_ADD, ФУНКЦИЯ, HE ЯВЛЯЮЩАЯСЯ ЧЛЕНОМ КЛАССА
Атомарно читает значение из экземпляра atomic и заменяет его суммой этого значения и аргумента i.
volatile atomic * p, integral-type i) noexcept;
atomic * p, integral-type i) noexcept;
Параллельное программирование на С++ в действии. Практика разработки многопоточных программ [Энтони Уильямс] (fb2)
Книга заблокирована по требованию правообладателя или ФЗ-114/ФЗ-149/ФЗ-398.
Параллельное программирование на С++ в действии. Практика разработки многопоточных программ 2.98 Мб, 630с. (читать) (скачать fb2) (скачать исправленную)
издано в 2012 г. (post) (иллюстрации)
[url=https://coollib.net/b/417345]
[b]Параллельное программирование на С++ в действии. Практика разработки многопоточных программ (fb2)[/b]
[img]https://coollib.net/i/45/417345/cover.jpg[/img][/url]
QR-код книги
Аннотация
В наши дни компьютеры с несколькими многоядерными процессорами стали нормой. Стандарт С++11 языка С++ предоставляет развитую поддержку многопоточности в приложениях. Поэтому, чтобы сохранять конкурентоспособность, вы должны овладеть принципами и приемами их разработки, а также новыми средствами языка, относящимися к параллелизму.
Книга «Параллельное программирование на С++ в действии» не предполагает предварительных знаний в этой области. Вдумчиво читая ее, вы научитесь писать надежные и элегантные многопоточные программы на С++11. Вы узнаете о том, что такое потоковая модель памяти, и о том, какие средства поддержки многопоточности, в том числе запуска и синхронизации потоков, имеются в стандартной библиотеке. Попутно вы познакомитесь с различными нетривиальными проблемами программирования в условиях параллелизма.
В этой главе:
■ Что понимается под параллелизмом и многопоточностью.
■ Зачем использовать параллелизм и многопоточность в своих приложениях.
■ Замечания об истории поддержки параллелизма в С++.
■ Структура простой многопоточной программы на С++.
В этой главе:
■ Запуск потоков и различные способы задания кода, исполняемого в новом потоке.
■ Ждать завершения потока или позволить ему работать независимо?
■ Уникальные идентификаторы потоков.
В этой главе:
■ Проблемы разделения данных между потоками.
■ Защита данных с помощью мьютексов.
■ Альтернативные средства защиты разделяемых данных.
В этой главе:
■ Ожидание события.
■ Ожидание однократного события с будущими результатами
■ Ожидание с ограничением по времени.
■ Использование синхронизации операций для упрощения программы.
В этой главе:
■ Детальные сведения о модели памяти С++.
■ Атомарные типы в стандартной библиотеке С++.
■ Операции над атомарными типами.
■ Как можно использовать эти операции для синхронизации потоков.
В этой главе:
■ Что понимается под проектированием структур данных, рассчитанных на параллельный доступ?
■ Рекомендации по проектированию таких структур.
■ Примеры реализации параллельных структур данных.
В этой главе:
■ Реализация параллельных структур данных без использования блокировок.
■ Техника управления памятью в структурах данных без блокировок.
■ Простые рекомендации по написанию структур данных без блокировок.
В этой главе:
■ Методы распределения данных между потоками.
■ Факторы, влияющие на производительность параллельного кода.
■ Как от этих факторов зависит дизайн параллельных структур данных.
■ Безопасность многопоточного кода относительно исключений.
■ Масштабируемость.
■ Примеры реализации параллельных алгоритмов.
В этой главе:
■ Пулы потоков.
■ Учет зависимостей между задачами, адресованными пулу.
■ Занимание работ у потоков из пула.
■ Прерывание потоков.
В этой главе:
■ Ошибки, связанные с параллелизмом.
■ Поиск ошибок путем тестирования и анализа кода коллегами.
■ Разработка тестов для многопоточных приложений.
■ Тестирование производительности многопоточных приложений.