Думать о железе

Думать о железе

Очень важным, для тех кто хочет стать действительно высококвалифицированным программистом,  является понимание, как «железо» обрабатывает информацию.

Стоит в начале упомянуть, что на данном сайте я буду избегать каких-то банальных и часто встречающихся вещей, хоть иногда и буду их описывать. Цель сайта — рассказать о концептуальных понятиях и абстракциях, которыми и мыслят программисты. Помните, хороший опытный программист никогда не привязываться к одному-двум языкам, НО ДЛЯ НАЧИНАЮЩИХ ЛУЧШЕ ОГРАНИЧИТЬСЯ ОДНИМ-ДВУМЯ ЯЗЫКАМИ хотя бы на первые пол года. Поняв общие принципы и логику будет достаточно легко переходить с языка на язык, правда изучение новых операторов и библиотек тоже занимает некоторое время, но обычно оно быстро окупается, ведь переход на новый язык не происходит просто так. Гораздо большее времени занимает понимание что есть что, как когда-то даже крупные компании сомневались или даже отказывались переходить на парадигму ООП (что такое Объекты и Объектно Ориентированное Программирование расскажем в ближайшем будущем), т.к. это займет прилично времени. Ладно отвлеклись от текущей темы.

Что я подразумеваю в «думанье о железе». К примеру Вам нужно сделать какую-то простейшую математическую операцию, допустим 2+3. Тут в дело вступают типы данных. Они бывают целочисленные и с плавающей запятой. С каждым из этих типов работает отдельная часть центрального процессора. Сложить целочисленные 2 и 3, либо значения с плавающей запятой 2,0 и 3,0 занимает у процессора одинаковое количество времени. А что бы сложить целочисленное 2 и значение с плавающей запятой 3,0 придется первое число подогнать к типу второго числа, а именно сделать 2,0 (практически всегда это период именно к типу с плавающей запятой). Перевод типов занимает относительно много процессорного времени.

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

В вакууме это правильно, это так. Вот только здесь появляются два других фактора, которые могут повлиять на решение:

  1. Центральные процессоры имеют неравное количество вычислительных блоков для работы с целочисленными значениями и значениями с плавающей запятой. Количество вычислительных блоков для целочисленных может быть в 2 или даже 3 раза больше, потому ОДНОВРЕМЕННОЕ повторение простейшего сложения для разных объектов будет выполнено быстрее для одного типа данных и медленнее для другого, в то время как выполнение единичной операции одинаково. При определенном количестве операций перевести данные из типа с плавающей запятой в целочисленный тип, затем проведение длинной цепочки тех самых операций, а затем перевод обратно в тип с плавающей запятой выйдет более быстрым, чем многократное сложение значений с плавающей запятой.
  2. Современные компьютеры, телефоны и многое другое не работает только лишь с одним приложением в один момент времени, и само приложение не строится только лишь из простейших цепочек сложений и вычитаний, потому нужно создавать программу, которая будет максимально эффективно загружать блоки предназначенные для всех возможных типов данных. Возможно цепочка операций с типом А будет выполнена быстрее, чем такая же цепочка операций с типом Б. В первом случае цепочка операций займет 1 минуту, а во втором 1.3 минуты. Но если запустить две одинаковые цепочки с типом А, суммарное время будет 2 минуты, а две цепочки с разными типами так и займут 1.3 минуты.

Конечно есть много НО и ЕСЛИ, но суть думаю Вы уловили. Есть еще важные вещи, о которых зачастую не пишут даже в действительно крупных и уважаемых (в том числе и мною) книгах, о них мы постараемся здесь рассказывать.

© Все права защищены.

Top