Внимание!!!! Книга удалена по требованию
правообладателя!!!!
Предисловие ....10Благодарности ....12Об этой книге....14Для кого эта книга ....14Как устроена эта книга ....15О коде в книге ....15Форум liveBook ....16Об авторе ....17От издательства....18ЧАСТЬ I. ОРКЕСТР ОСЬМИНОГОВ. СИМФОНИЯ КОНКУРЕНТНОСТИ ....19Глава 1. Знакомство с конкурентностью....20Почему конкурентность важна ....21Уровни конкурентности ....27Что вы узнаете из этой книги ....29Итоги ....31Глава 2. Последовательное и параллельное выполнение....32Обзор основных понятий: что такое программа ....33Последовательное выполнение ....35Требования к параллельным вычислениям ....41Параллельные вычисления ....43Закон Амдала ....49Закон Густафсона ....54Конкурентность и параллелизм ....55Итоги ....57Глава 3. Как работают компьютеры ....59Процессор ....60Система выполнения ....64Архитектура компьютерных систем ....66Уровни конкурентного оборудования ....67Итоги ....72Глава 4. Структурные элементы конкурентности....74Этапы конкурентного программирования ....75Потоки ....80Итоги ....86Глава 5. Межпроцессная коммуникация ....87Типы коммуникации ....88Пул потоков ....98Снова о подборе паролей ....101Итоги ....103ЧАСТЬ II. ЩУПАЛЬЦА КОНКУРЕНТНОСТИ: МНОГОЗАДАЧНОСТЬ, ДЕКОМПОЗИЦИЯ И СИНХРОНИЗАЦИЯ ....105Глава 6. Многозадачность ....106Приложения с интенсивными вычислениями (CPU-bound) и интенсивным вводом/выводом (I/O-bound) ....107Почему необходима многозадачность ....109Общие принципы многозадачности ....112Многозадачные среды ....119Итоги ....121Глава 7. Декомпозиция ....123Анализ зависимостей ....124Декомпозиция задач ....125Декомпозиция задач: паттерн «Конвейер» ....128Декомпозиция данных ....133Уровень детализации ....143Итоги ....145Глава 8. Как решать проблемы конкурентности: ситуации гонки и синхронизация ....146Общие ресурсы ....147Ситуация гонки ....148Синхронизация ....153Итоги ....161Глава 9. Как решать проблемы конкурентности: взаимные блокировки и нехватка ресурсов ....162Обедающие философы ....163Взаимные блокировки ....165Нехватка ресурсов ....173Как проектировать синхронизацию ....175Несколько слов напоследок ....181Итоги ....181ЧАСТЬ III. АСИНХРОННЫЕ ОСЬМИНОГИ. ИСТОРИЯ О КОНКУРЕНТНОМ ВЫПОЛНЕНИИ СО ВКУСОМ ПИЦЦЫ ....183Глава 10. Неблокирующий ввод/вывод ....184Мир распределенных вычислений ....185Модель «клиент — сервер» ....185Служба заказа пиццы ....188Блокирующий ввод/вывод ....195Неблокирующий ввод/вывод ....198Итоги ....201Глава 11. Событийная конкурентность....203События ....204Обратные вызовы ....205Цикл событий ....206Мультиплексирование ввода/вывода ....208Событийный сервер для заказа пиццы ....209Паттерн «Реактор» ....212Синхронизация при передаче сообщений ....214Модели ввода/вывода ....217Итоги ....219Глава 12. Асинхронная коммуникация ....220Зачем нужна асинхронность ....221Асинхронные вызовы процедур ....222Кооперативная многозадачность ....223Преднамеченные объекты ....229Кооперативный сервер для заказа пиццы ....232Асинхронная пиццерия ....237Асинхронная модель: выводы ....243Итоги ....244Глава 13. Как писать конкурентные приложения ....245Так что же такое конкурентность? ....246Методология Фостера ....247Умножение матриц ....249Распределенный подсчет слов ....258Итоги ....271Эпилог ....272
Конкурентность позволяет эффективно выполнять компьютерные программы, разделяя их на задачи, которые можно запускать независимо. Такой подход помогает ускорить игровую графику, обучать большие модели искусственного интеллекта, быстро масштабировать веб-приложения, оптимизировать обработку больших данных и решать многие другие задачи. Работать с конкурентностью непросто, так что эта книга постепенно введет вас в курс дела, а помогут в этом интересные примеры, забавные иллюстрации и понятный код на Python. Вы изучите приемы, с помощью которых сможете программировать многоядерные и графические процессоры, а так же другие высокопроизводительные системы. Кирилл Бобров обходится без сложной математики, технического жаргона и тяжеловесных научных рассуждений, предпочитая простые и доступные объяснения.