Страницы

20 июл. 2014 г.

Толковый словарь

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


Бинарники (Binaries)

Есть такое слово — программа. Беда в том, что этим словом называют и алгоритм, и исходный код, и скомпилированный код, и процесс во время исполнения. А вещи-то разные.

До компиляции программа выглядит как один или несколько текстовых файлов — это исходники. После компиляции программа превращается в набор инструкций для операционной системы и процессора, сохранённый в файл. Это и есть бинарник.

Библиотеки (libraries, libs)

Предположим, что вы написали набор функций для работы с png-файлами. На работу ушёл месяц, а потом ещё год на исправление ошибок и тестирование. Очевидно, что этот код понадобится вам в будущем, поэтому вы сохраняете исходники в надёжном месте. В следующий раз вы копипастите код в новый проект, или подключаете его по всем правилам (т.е. через заголовочные .h файлы). В любом случае, код функций для png будет намертво замурован в исполняемом файле. Если одна и та же функция используется в десяти программах, её код будет десятикратно продублирован в бинарниках этих программ.

Не очень-то эффективно держать кучу копий одного и того же. Куда интереснее скомпилировать несчастную функцию один раз и поместить в отдельный файл — библиотеку. Когда в некоторой программе понадобится функция из библиотеки, во время исполнения должен сработать некий вызов, передающий управление в библиотеку, затем обратно по команде return. Вот так получаются общие библиотеки — shared libraries. В том смысле шаред, что один и тот же код одновременно используется разными процессами.

Когда библиотека готова, её можно опубликовать в интернете, чтобы другие разработчики имели возможность использовать результат чужого труда. Библиотека обязательно должна сопровождаться документацией: какая функция что делает, какая структура для чего предназначена и т.д.

Для работы с png файлами есть простенькая библиотека libpng, и более продвинутая — cairo. Наверняка вы слышали про уязвимость heartbleed в ssl. Так вот, протокол ssl реализован в библиотеке libssl. Если вам нужно подключиться куда-то по защищённому протоколу из своей софтины, можете воспользоваться данной библиотекой.

Профилирование (profiling)

Очень интересная процедура. Программа-профилировщик позволяет посмотреть сколько времени выполнялась каждая функция, каждая строка кода. Профилирование нужно в первую очередь для выявление узких мест в программе, на которых происходит основная потеря времени. Как говорится, 20% кода выполняются 80% времени. Профилирование нацелено на поиск этих 20%.

Никсы (*nix)

Это сокращенное название юникс-подобных операционных систем. Дословно "*nix" означает "все слова, оканчивающиеся на nix". Самые известные никсы: Linux, FreeBSD, Solaris, HP UIX, AIX.

Форк (fork)

Дословно — ответвление.

В программировании

Известно, что сделать копию цифрового объекта очень просто. Fork — это системный вызов, создающий абсолютную копию процесса во время его выполнения. После вызова fork() исходный процесс и его клон начинают жить независимо друг от друга. Я никак не мог понять этот механизм, пока не написал тестовую программу.

В мире open-source

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

Разделяемый (shared)

Некий ресурс или объект, используемый одновременно несколькими потребителями.

Разделяемая память (shared memory)

— блок оперативной памяти, используемый одновременно несколькими процессами.

Общие папки (shared folders)

— папки, к которым разрешён доступ по сети, т. е. их видно одновременно с разных компьютеров.

Удалённый (remote)

Я никак не мог понять, что такое "удалённый рабочий стол" в Windows. Это стол, который я случайно удалил? Оказывается это слово используется в значении "находящийся на удалении". Не очень удачный перевод, лучше сказать "дистанционный". Тем не менее термин стал устойчивым.

Буфер (buffer)

Что такое читать из буфера или писать в буфер? Оказывается, буфер — это непрерывный кусок памяти фиксированного размера. Например, что происходит, когда мы открываем некий файл на чтение и читаем из него один байт? Операционная система обращается к диску и заполняет входной буфер целиком, по нескольким причинам. Когда мы будем читать второй байт, он придёт из буфера, а не с диска. Короче говоря, буфер — это некое временное хранилище. Да, именно в оперативной памяти.

Сервер

Это самое загадочное слово в моём словаре — сервером называют одновременно три разные вещи.

Сервер, который программа.

Тут следует читать про клиент-серверную архитектуру.

Сервер как узел сети (хост).

Это физический компьютер или виртуальная машина, которая занимается серверными задачами. Например на нём могут быть запущены:
  • файловый ftp-сервер, для доступа к общим папкам,
  • почтовый smtp-сервер для внутренней почты предприятия,
  • web-сервер с домашней страничкой, что-нибудь ещё,
  • принт-сервер, предоставляющий доступ к принтерам,
  • VPN-сервер, для подключения к локальной сети из любой точки мира.

Такой компьютер обычно не выключают, чтобы его услугами можно было воспользоваться и днём, и ночью. Если нагрузка на сервер не очень большая, то его можно использовать и для повседневных задач. В противном случае лучше его лишний раз не дёргать — пусть себе работает.

Сервер как узкоспециализированный компьютер (железо).

Есть железо, предназначенное для серверных задач. На таких компьютерах может отсутствовать то, что является нормой для персоналок. Звуковая карта например, потому что нафига серверу звук? А вот слотов под оперативную память может быть много. Еще может стоять рэйд-массив. Простой ответственного сервера может стоить очень дорого, поэтому надёжность стоит на первом месте.

Конструктивно такие компьютеры выполняются в виде тонких горизонтально-ориентированных корпусах фиксированной толщины, которая измеряется в юнитах — 1U, 2U и т. д. Корпуса предназначены для установки в специальные шкафы. Получается компактненько. На передней панели серверных корпусов как правило располагаются дверцы для быстрой замены жёстких дисков.

Клиент-серверная архитектура

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

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

Из практического стоит познакомиться с протоколом ftp. Другой интересный пример - dhcp-сервер.

Комментариев нет:

Отправить комментарий