Главная » Просмотр файлов » А. Александреску - Современное проектирование на C++

А. Александреску - Современное проектирование на C++ (1119444), страница 76

Файл №1119444 А. Александреску - Современное проектирование на C++ (А. Александреску - Современное проектирование на C++) 76 страницаА. Александреску - Современное проектирование на C++ (1119444) страница 762019-05-09СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 76)

Классы ваз1со1зрассйег и ваз1сгазсо1зрассбег хранят и вызывают 315 Глава 11. Мультиметоды объекты этого типа. Все остальные параметры имеют тот же смысл, что и в классе ьсасз соз ьрасс)зег. ° Функции, реализуемые классами ваь1со1ьрассИег и ваь1сгаьсо1ьрасс)зег, перечислены в табл. 1!.!. ° Кроме указанных трех основных диспетчеров, в библиотеке Ео)ц определены еше два диспетчера: классы гпо1ьрасс)зег и гцпссого1ьрасс)зег.

Они используют классы ваь1со1ьрасспег и ваь1сгаьсо1ьрасс)зег в качестве стратегий. ° Классы гпоз ь расс)зег и гипссогоз ь расс)зе г имеют олинаковые объявления. севр1асе с1аьь Ваьеьпь, с1аьь ваьеяпь = ваьеьпь, яеьц1стуре = чо10, севр1асе <с1аьь то, с1аьь ггов> с1аьь саьс1ппго11су = оупав1ссаьс севр1асе <с1аьь, с1аьь, с1аьь, с1аьь> с1аьь о1ьрасспегвас!сепд = ваь1со1ьрасспег > с1аьь гпо1ьрассйег; Здесь классы ваьеь!зь и ваьеапь — это базовые классы двух иерархий, вовлеченных в двойную диспетчеризацию.

Класс аеьц1стуре задает тип значения, возвращаемого обратными вызовами и диспетчером. Класс саьс)пйго1зсу— это шаблонный класс с двумя параметрами. Он должен реализовывать функцию-член саьс, принимающую ссылку на объект класса ггов и возврашаюшую ссылку на объект класса то. Основные реализации классов оупав1ссаьсег и ьтаС1ссаьсег используют операторы пупав1с саьс и ьсас1ь саьс соответственно. Шаблонный класс о1ьрасспегвасйепо реализует тот же интерфейс, что и классы ваь1со1ьрасспег и ваь1сгаьсо1ьрасспег, описанный в табл.

!!.!. ° И класс гпозьрасспег, и класс гцпссого1ьрасспег определяют функцию-член ддс) или основные типы обработчиков. Для класса гпобьрасспег основным типом обработчика является класс яеьо)стуре(*)(ваьеспьй, ваьеяпьй). Для класса гцпссогоз ьрассйег основным типом обработчика является класс гипссог<яеьц1Стуре, турвътьт 2(ваьеъпьй, ваьеяпьй)>. Описание класса гипссог дано в главе 5. ° Кроме того, класс гпозьрасспег определяет шаблонную функцию, предназначенную для регистрации обратных вызовов. чо10 ддс)<ьовеспь, ьовеяпь, яеьц1стуре (*са11басй)(ьовеъпьй, ьовеапьй), )зоо1 ьуввесг1с>О; ° Если обработчик регистрируется функцией-членом лоо, описанной выше, пользователь получает преимушества автоматизированного приведения типов и симметрии.

° В классе гцпссого1ьрасспег определяется шаблонная функция-член дбд. севр1асе <с1аьь ьовеъ)зь, с1аьь ьовеаМ, с1аьь г> чо10 лоо(сопьс гб Гцп); ° Класс г может быть одним из типов, получаемых объектом класса гипссог (глава 5), включая другую конкретизацию класса гцпссог. Объект класса г 316 Часть й.

Компоненты должен допускать выиолнение оператора вызова функции с аргументами, имеющими типы ВазеНаб и Вааеаизй, и возврашать значение, тип которого может бьнь преобразован в тип аезо1ттуре. ° Если обработчик не найден, все механизмы диспетчеризации генерируют исключительную ситуацию, имеюшую тип зтг1:: гиптт ве еггог.

Глава 11. Мультиметоды Приложение МНОГОПОТОЧНАЯ БИБЛИОТЕКА В СТИЛЕ МИНИМАЛИЗМА В многопоточной программе одновременно сушествует несколько точек выполнения. Это значит, что в такой программе несколько функций могут выполняться параллельно. В многопроцессорных компьютерах разные потоки выполняются одновременно в буквальном смысле этого слова. В то же время многопоточные операционные системы в однопроцессорных машинах применяют режим разделения вреиени (г(те з1ге)па) — они разделяют каждый поток на короткие интервалы времени, откладывают его и предоставляют процессорное время другому потоку. Это создает у пользователя иллюзию параллельного выполнения нескольких функций.

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

Создать внешнюю библиотеку, которая надежно работала бы в многопоточном режиме, невозможно, даже если сама библиотека не использует потоки. Отсюда следует, что нельзя игнорировать вопросы, связанные с многопоточностью. (Разумеется, на самом деле можно обойтись и без этого, однако в таком случае они стануг совершенно бесполезными в многопоточной среде.) Поскольку современные приложения все интенсивнее используют многопоточное выполнение, было бы глупо игнорировать многопоточность просто из-за лени.

В приложении описываются средства и приемы, позволяюшие разрабатывать машинно-независимые многопоточные обьектно-ориентированные приложения на языке С++. Его нельзя рассматривать как полноценное введение в многопоточное программирование. Попытка рассмотреть все вопросы, связанные с разработкой многопоточной библиотеки, бьша бы бесполезной и обреченной на провал. Таким образом, мы сосредоточилюя лишь на минимальных абстракциях, позволяюших создавать многопоточные компоненты. функциональные средства для поддержки многопоточного режима, реализованные в библиотеке (.оЫ, скудны по сравнению с огромным количеством средств, предоставляемых современными операционными системами, поскольку они ориентированы только на обеспечение безопасности работы потоков.

С другой стороны, концепции синхронизации, определенные в этом приложении„находятся на более высоком уровне, чем традиционные мьютексы (пплехез) и семафоры (зепзар1югез) и могут оказаться полезными при разработке любого обьектно-ориентированного многопоточного приложения. П.1. Критика многопоточности Преимушества многопоточного режима в многопроцессорных машинах очевидны. Но если компьютер имеет один процессор, многопоточность выглядит довольно глупо.

Зачем замедлять рабату процессора, заставляя его работать в режиме разделения времени? Очевидно, что выигрыша во времени это не дает. Чудес не бывает — у нас по-прежнему лишь один процессор, поэтому в целом многопоточный режим даже немного снизит эффективность из-за дополнительных операций обмена данными и регистрации. Причина, по которой многопоточный режим все же применяют в однопроцессорных машинах, заключается в эффективном использовании ресурсов. Типичный современный компьютер имеет намного больше ресурсов, чем один процессор.

Он снабжен дисководами, модемами, сетевыми картами и принтерами. Поскольку все они с физической точки зрения независимы друг от друга, их ресурсы можно использовать одновременно. Например, не сушествует причин, запрешаюших процессору производить вычисления, пока выполняется запись информации на диск или вывод результатов на принтер. Однако это оказывается действительно невозможным, если приложение и операционная система жестко связаны только с однопоточной моделью выполнения программы. Вряд вы обрадовались, если бы ваше прила:кение не позволило вам ничего делать, пока не завершится загрузка данных из Интернет. Кроме того, даже процессор в какие-то моменты времени оказывается в простое.

При редактировании трехмерных изображений короткие интервалы времени между движениями мыши и шелчками кажутся процессору вечностью. Было бы хорошо, если бы программа для рисования изображений могла использовать эти моменты простоя для выполнения полезной работы, например, отслеживания луча или вычисления скрытых линий. Основной альтернативой многопоточности является асинхронное выполнение (аяпсЬгопоцз ехесцбап).

Режим асинхронного выполнения программы основан на модели обратных вызовов (сайЬасй шог)е!); при выполнении операции производится регистрация функции, которую следует вызвать после ее завершения. Основным недостатком асинхронного выполнения программы по сравнению с многопоточным режимом является избыток состояний программы.

Используя асинхронную модель, нельзя проследить выпалнение алгоритма шаг за шагом — можно лишь хранить состояние и позволять обратным вызовам его изменять. Подаержка такого состояния весьма проблематична и легко реализуется лишь для простейших операций. Истинная многопоточная модель лишена таких недостатков. Каждый поток имеет неявное состояние, определяемое его точкой выполнения (оператором, который выполняется потоком в данный момент). Работу потока легко проследить, как если бы он был простой функцией.

В асинхронной модели программист должен сам управлять точкой выполнения. (Основной вопрос асинхронного программирования: "Где я?".) В заключение отметим, что многопоточные программы могут реализовывать синхронную модель выполнения, что уже хорошо. С другой стороны, потоки порождают большие проблемы, поскольку они совместно используют ресурсы, например, данные, записанные в памяти. В любой момент потоки могут прерываться другими потоками (да, именно в любой момент, даже посреди присваивания), поэтому операции, которые мы привыкли считать атомарными, таковыми больше не являются.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6479
Авторов
на СтудИзбе
303
Средний доход
с одного платного файла
Обучение Подробнее