автор: Pipa
Кому ни задай вопрос о цели своего «самосовершенствования», получишь приблизительно один и тот же ответ – стремлюсь, мол, к «целостности самого себя». Это предельное состояние называют по-разному. И «третьим вниманием» и «просветлением», либо еще как. Но суть от этого меняется не сильно.
Вот и я хочу проанализировать – насколько ценна эта целостность, чтобы к ней так настойчиво стремиться, а также, отчего так случилось, что мы до сих пор не являемся целостными, если это действительно так хорошо.
Учитывая специфику аудитории :-), обращусь ко всем известному примеру – операционной системе DOS :-). Один пользователь – один компьютер – один процессор – одна задача. Чем не целостность? Однако даже в те далекие времена находились умельцы запустить под DOS фоновый (background) процесс. Грузили резидентом (TSR) фоновую прогу, которая перехватывала прерывания от таймера, что обеспечивало ей квант времени, необходимый для ее работы.
А дальше – больше! С выходом первых версий Windows появилась и узаконенная многозадачность. Сначала кооперативная, а потом и вытесняющая.
На распараллеливание шли несмотря ни на что! Ни на то, что приходилось распределять время единственного процессора с неизбежными потерями в производительности (при каждом переключении задач приходится запоминать контекст «рабочей среды» прошлой задачи и восстанавливать среду следующей). И не смотря на все – вперед к параллелизму! :-)
Обращу внимание тех, кто не четко отличает параллелизм в работе от переключения задач. Переключалку задач не так сложно было бы сделать и под DOS – выбираешь задачу и с ней работаешь. А остальные задачи – мертвы, на диск сброшены. Это случай чистого переключения. А вот параллелизм – это когда задачи либо действительно в параллель работают (в многопроцессорных системах), либо когда параллельность симулируется очень частым периодическим переключением по кругу всех запущенных задач. Т.е. даже в том случае, когда видна работа только активной (foreground) задачи, остальные не стоят! Они лишь добровольно отказываются от своего кванта времени (или его части) по той причине, что им нечего делать.
Одновременно с введением 32-разрядности (Win32), была введена еще и МНОГОПОТОЧНОСТЬ (multithread). Это своего рода распараллеливание процессов/заданий внутри одной задачи.
Так почему же эволюция программ идет в этом направлении? Может это такие «кривые» особенности компьютера или программистского мышления? А вот и нет! Процессор со своим единственным потоком команд всячески сопротивляется этому. А какие сложности возникают при программировании – это и пером не описать! Тут и специальные «семафоры» для согласования параллельных процессов. И «критические секции» для того, чтобы один процесс не «наехал» на другой :-). И системы обмена инфой между процессами. И многое, многое другое... Зачем же такой напряг?
Оказывается, что в программах, ориентированных на чисто вычислительные цели (математические, статистические, графические и пр. пакеты) такие приемы почти не используются. А вот как только программа «выходит в Мир», включаясь в процессы, протекающие в РЕАЛЬНОМ времени (real-time), то тут без параллелизма никуда! Даже в том древнем DOS'е обработчики прерываний от таймера, клавиатуры, COM-портов, модема и т.п. (= связь с внешним Миром) представляли собой по своей сути отдельные процессы, активизируемые аппаратными прерываниями.
По всему выходит, что распараллеливание является своего рода РЕАКЦИЕЙ на то, что сам Мир уже сам по себе распараллелен!
И пусть даже компьютер воспроизводит, например, игровое поле – жалкое, но, тем не менее, ПОДОБИЕ РЕАЛЬНОГО МИРА, как тут же оказывается, что пока один персонаж игры несет бревно, то другой кладет кирпичи. И никак нельзя, чтобы они делали это ПО ОЧЕРЕДИ. Тогда будет НЕПОХОЖЕ (!) на то, что мы наблюдаем в реальности.
Вот и мы сами, «помазанные Миром» :-), представляем собой ровно туже разновидность многопотоковых приложений :-). Оттого и мозги наши устроены по принципу максимального распараллеливания операций. Это тем более целесообразно, потому что «тактовая частота» у нас маловата и значительно увеличить ее не представляется возможным – все-таки мы «химические машины», а не электронные.
Эволюция компьютеров только началась и когда-нибудь они обретут сознание ... и обнаружат свою многозадачную природу. Интересно, устремятся ли они тогда к целостности самих себя?