Читаем Журнал «Компьютерра» №44 от 29 ноября 2005 года полностью

Для начала рассмотрим «традиционный» подход к программированию, который в нашем модельном примере выглядит следующим образом. Пишется некоторый кусочек кода (назовем его GameTick), который последовательно перебирает все имеющиеся в игре объекты, «вычисляя» события, происходящие с ними в данный момент времени (Tick, тик). Скажем, один объект - солдат в окопе - «поразмыслил» своим модулем AI, принял решение бросить гранату и бросил ее, сгенерировав новый игровой объект - летящую гранату. Другой объект - брошенный другим солдатом секунду назад «коктейль Молотова» - в результате вычислений физического движка изменил свое положение в пространстве, прошел проверку на соприкосновение с броней танка и прекратил существование. Танк, угодивший под бутылку с зажигательной смесью, перешел из состояния «танк обыкновенный» в состояние «танк горящий». Другой танк повернул башню еще на пять градусов влево. На этом игровые объекты, требующие вычислений, закончились, и сцена с игровыми объектами ушла на обработку к графическому движку, который конвертировал абстрактных солдат, танков и игровое поле во вполне осязаемые полигоны и текстуры, понятные видеокарте. При этом на экране появилась описанная выше картинка, сменившая предшествовавший кадр. А меж тем наша программа опросила клавиатуру и мышь (не решил ли пользователь как-то повлиять на ситуацию?) и перешла на уже известный нам участок кода делать очередной GameTick. Добавим сюда музыкальное сопровождение по вкусу - и игра «заработала»[Разумеется, все не так просто, но в первом приближении можно довольствоваться и этой моделью]. Танки ездят, снаряды летают, геймер отчаянно дает бойцам указания мышкой, в колонках «бумкает» все, что положено… остается лишь записать свежесотворенный шедевр на DVD и топать к издателю.

А теперь представим, что все то же самое мы хотим сделать «параллельно».


«Детские трудности» параллельного программирования


Зачем? Ну хотя бы затем, что сегодня это модно. И без технологии HyperThreading и оптимизаций под нее нам уже года три как не жить. На самом деле, конечно, причина грядущего перехода к параллельному программированию в том, что крупнейший производитель процессоров для ПК - корпорация Intel - обещает, что к концу следующего года более 70% продаваемых ею процессоров[А стало быть, как минимум половина всех продаваемых x86-совместимых процессоров] будут двухъядерными, - с чуть меньшей производительностью в пересчете на один-единственный поток исполнения, но зато выполняющие два (или даже четыре) потока одновременно[Подробнее о двухъядерных процессорах см. на offline.computerra.ru/2005/594/39218]. Поэтому если программист сумеет хорошо «раскидать» программу на два параллельных потока (сам процессор делать этого не умеет), то он получит на двухъядерном чипе гораздо большую производительность, чем на аналогичном по стоимости одноядерном. А если не сумеет - то получится как в хорошо знакомом всем россиянам изречении о том, что «хотели как лучше…». Таким образом, налицо и кнут (грозящее снижение производительности, если оставить все «как есть»), и пряник (потенциальный прорыв в скорости) - более чем убедительные аргументы за то, чтобы не отставать от технического прогресса.


***


Но как это вообще делается? В классическом варианте - полностью вручную. Главный поток программы (который создала при запуске приложения операционная система) формирует (посредством специальных системных вызовов) несколько новых потоков[В случае Unix-систем при этом происходит весьма нетривиальная вещь: при создании первого потока «главный» поток как бы «замораживается» операционной системой, а в операционной системе возникают еще две сущности - новый поток, запущенный по просьбе «главного», и «наследующий» поток, который продолжает исполнение «главного» кода, но не является собственно процессом], приступающих к выполнению программы с того места, которое указывается в числе параметров вызова. Детали реализации в разных ОС отличаются[Существует два основных стандарта: используемый в мире Open Source стандартный интерфейс pthreads (POSIX Threads) и детище Microsoft - так называемая Win32 Threading model], однако принцип совершенно одинаков: одна программа, одни и те же данные, несколько точек исполнения, одновременно перемещающихся по программе. Таким образом, вместо кода типа

Выполнить Действие1( )

Выполнить Действие2( )

мы записываем что-то вроде

ЗапуститьПоток(Действие1)

ЗапуститьПоток(Действие2)

и при этом Действие1 и Действие2 выполняются параллельно и независимо друг от друга. То есть в отличие от «классики», где программа сперва проверяет, попал ли в танк снаряд, а уж затем решает, что этому танку делать дальше, здесь обсчет поведения объектов происходит одновременно. Правда, поскольку действие, как правило, выполняется одно, но над разными данными (скажем, для десятка танков вызывается один и тот же программный код, рассчитывающий физику и новые координаты танка), то гораздо чаще возникает код

ЗапуститьПоток(Действие, для Объекта1)

ЗапуститьПоток(Действие, для Объекта2)

Перейти на страницу:

Все книги серии Компьютерра

Похожие книги

«Если», 2000 № 08
«Если», 2000 № 08

ФАНТАСТИКАЕжемесячный журналСодержание:Джеймс Типтри-младший. ДЕВОЧКА, КОТОРУЮ ПОДКЛЮЧИЛИ, рассказВернисаж*Вл. Гаков. ЧУЖАК В ЧУЖОЙ СТРАНЕ, статьяКир Булычёв. ЧЕГО ДУША ЖЕЛАЕТ, рассказВидеодром*Атлас--- Галина Компаниченко. НА РОДИНЕ РОБОТОВ, статья*Скандал сезона--- Вл. Гаков. «НО НЕ ЛЮБИМ МЫ ЕГО НЕ ЗА ЭТО…», статья*Рецензии*Экранизация--- Дмитрий Байкалов. СТРАННАЯ ИСТОРИЯ СО ЗНАМЕНИТЫМ РАССКАЗОМ, статьяБрайан Олдисс. ВИДИМОСТЬ ЖИЗНИ, рассказВладимир Хлумов. МОЛЧАНИЕ КОСМОСА, статьяАлександр Громов. ВЫЧИСЛИТЕЛЬ, повестьДжеймс Келли. КРОШКА-МОШКА-ПАУЧОК, рассказАлександр Ройфе. В ПОИСКАХ НОВОГО ИДЕАЛА, круглый столКонкурс «Альтернативная реальность»*Валерия Илющенко. НАКАЗАНИЕ ПЕРВОЙ СТЕПЕНИ, рассказВладимир Михайлов. ХОЖДЕНИЕ СКВОЗЬ ЭРЫ, окончание эссеРецензииКрупный план*Дмитрий Володихин. ИЛЛЮЗИЯ РЕАЛЬНОСТИ, статья2100: история будущего*Алексей Зарубин. НА ЧАРЕ ВСЕ СПОКОЙНО…, рассказКурсорPersonaliaНа обложке иллюстрация И. Тарачкова к повести Александра Громова «Вычислитель».Иллюстрации А. Филиппова, А. Жабинского, А. Балдина, И. Тарачкова, О. Дунаевой.

Александр Николаевич Громов , Валерия Валерьевна Илющенко , Владимир Гаков , Джеймс Типтри-младший , Журнал «Если»

Фантастика / Научная Фантастика / Журналы, газеты
«Если», 1998 № 06
«Если», 1998 № 06

Михаил ТЫРИН. ИСТУКАНЗнаете ли вы, что Циолковский все-таки построил космический корабль, а русские купцы торговали с инопланетянами еще в начале века? Если нет, то читайте новую фантастическую повесть калужского автора.Дэвид АЛЕКСАНДЕР, Хейфорд ПИРС. ПОСРЕДНИКОказывается, Посредник — весьма значительное лицо в галактике. И даже лишившись лицензии, он не перестает улаживать конфликты между расами и решать множество других сложных вопросов.Грегори БЕНФОРД. ПОГРУЖЕНИЕОтправляясь в отпуск, на лоно девственной африканской природы, супруги-ученые и не предполагает, какие леденящие душу события их ждут.ДОН УЭББ. ЧУЖАЯ ИГРАПохоже, что авантюристы, мошенники и охотники за кошельками богатых простаков не переведутся никогда и нигде, в том числе и на дальних планетах.Мэл ГИЛДЕН. ЧТО С ХЕРБИ?Такого разнообразия форм инопланетной жизни, как в этом забавном и трогательном рассказе, читатель наверняка еще не встречал.Эллен ГУОН. ДА УСЛЫШИТ НАС ГОСПОДЬ!Пересадочная станция на грани краха, но никто из специалистов не способен «договориться» с центральным компьютером…Филип ДЖЕННИНГС. ВИРТУАЛЬНАЯ КАБАЛАКак отличить реальность от вымысла? Порою это почти невозможно.Константин БЕЛОРУЧЕВ. ПРОГНОЗ? ИМИТАЦИЯ? ВЫМЫСЕЛ…Альтернативный подход к истории известен не только писателям-фантастам, но и самим историкам.Сергей ДЕРЯБИН. ВЫЗОВ ХАОСУМыслящие кристаллы, неорганическая жизнь — насколько это невероятно?Андрей ЧЕРТКОВ. РОМАН С КИБЕРПАНКОМЧитателей ждет «издательская исповедь» страстного поклонника киберпанка.Грегори БЕНФОРД. СВЕЖИЕ НОВОСТИ ИЗ ЦЕНТРА ГАЛАКТИКИИнтервью с корифеем НФ-жанра.КУРСОРЖизнь бьет ключом в мире фантастики — новости, слухи, события, планы…РЕЦЕНЗИИПрежде чем идти в книжный магазин, узнайте мнение рецензентов…Евгений ЛУКИН. «К САТИРЕ ОТНОШУСЬ С ПОДОЗРЕНИЕМ…»В рубрике «Прямой разговор» на вопросы читателей отвечает один из самых популярных отечественных фантастов.ПЕРСОНАЛИИУэбб, Гилден, Гу он и другие.ВЕРНИСАЖПредставляем автора обложки этого номера.ВИДЕОДРОМКлонирование человека: в жизни — пока фантастика, в кино — давно известный метод.Судьба книг Александра Беляева в кинематографе складывалась весьма драматически.Музыка, которая звучит с экрана, стала равноправным действующим лицом многих знаменитых картин.

Владимир Гаков , Грегори (Альберт) Бенфорд , Дмитрий Караваев , Константин Валерьевич Белоручев , Мел (Мэл) Гилден , Сергей Дерябин , Сергей Никифоров , Хэйфорд Пирс

Фантастика / Журналы, газеты / Научная Фантастика
«Если», 2004 № 03
«Если», 2004 № 03

ФАНТАСТИКАЕжемесячный журналСодержание:Э. К. Грант. ЧЕЛОВЕК, НЕНАВИДЕВШИЙ «КАДИЛЛАКИ», рассказОлег Овчинников. ОПЕРАТОРЫ ОДНОСТОРОННЕЙ СВЯЗИ, рассказМария Галина. ЮГО-ЗАПАДНАЯ ЖЕЛЕЗНАЯ ДОРОГА, рассказНФ-факты**Евгений Харитонов. ПЕРВАЯ ЛЕДИ ФАНТАСТИКИ (очерк)Кит Рид. ФОКУСНАЯ ГРУППА, рассказВидеодром**Мнение***** ВСТРЕЧАЙТЕ КОРОЛЯ, отзывы о фильме, стр. 67-73**Рецензии**ЭкранизацияВл. Гаков. ШТАММ «КРАЙТОН» (статья)Юлий Буркин. ЛЮБИТЬ ДРАКОНА, рассказРоберт Чейз. НЕВИДИМКИ, рассказТерри Пратчетт. СТРАТА, начало романаВернисаж**Вл. Гаков. КАРТОГРАФ ПЛОСКОЙ ЗЕМЛИ (статья, иллюстрации Джоша Кирби)Леонид Кудрявцев. ВЫСШЕЕ МАСТЕРСТВО, повестьВладислав Гончаров. ВОЛШЕБНИКИ В ЗВЕЗДОЛЕТАХ (статья)Экспертиза темыКонкурс «Альтернативная реальность»**Дмитрий Попов. Быть сильным, рассказАлександр Ройфе. ВЗРОСЛОЕ ЧТИВО (статья)РецензииКурсорПерсоналииОбложка Игоря Тарачкова к роману Терри Пратчетта «Страта»

Владимир Гаков , Дмитрий Попов , Леонид Викторович Кудрявцев , Олег Овчинников , Терри Дэвид Джон Пратчетт

Фантастика / Журналы, газеты / Научная Фантастика