АТОМЫ
Если абстрагироваться от вопросов синхронизации, то обмен данными между потоками одного процесса не представляет никакой сложности — имея общее адресное пространство и общие открытые файлы, потоки получают беспрепятственный доступ к данным друг друга.
Другое дело — обмен данными потоков, выполняющихся в рамках разных процессов.
Для защиты процессов друг от друга ОС возводит мощные изолирующие преграды, которые не только защищают процессы, но и не позволяют им передавать друг другу данные.
Потоки разных процессов работают в разных адресных пространствах. Однако операционная система имеет доступ ко всем областям памяти, поэтому она может играть роль посредника в информационном обмене прикладных потоков.
При возникновении необходимости в обмене данными поток обращается с запросом к ОС. По этому запросу ОС, пользуясь своими привилегиями, создает различные системные средства связи, такие, например, как каналы или очереди сообщений.
Эти средства, так же как и рассмотренные выше средства синхронизации процессов, относятся к классу средств межпроцессного взаимодействия, то есть IPC (Inter Process Communications).
Тот факт, что механизмы IPC работают на уровне операционной системы, положительно сказывается на скорости и надежности программ и программных комплексов, построенных с их использованием. Эффективность приложений соответственно возрастает.
Таким образом, IPC становится необходим в том случае, если поток одного процесса должен передать данные потоку другого процесса.
Интерфейс Win32 API предоставляет приложениям возможность хранения строк в структурах, известных под названием таблиц атомов.
После того как программа сохранит строку в таблице атомов, она может обратиться к этой строке, используя атом.
Aтом (atom) представляет собой уникальное 16-разрядное значение, которое связано со строковой константой.
Использование атома в качестве ссылки на строку сродни применению дескриптора памяти для обращения к блоку общих глобальных данных.
Подобие имеющейся у приложения возможности передавать дескриптор памяти интерфейсу Win32 API с целью получения указателя на содержимое блока данных (с помощью функции GlobalLock()), приложение может также использовать средства Win32 API для получения значения строки, связанной с атомом.
Значение строки, которое представляет атом, известно под названием имени атома (atom name). Применение атомов:
1. Атомы применяются в приложениях ради экономии памяти. Сохранение неоднократно встречающихся строк в таблице атомов приложения позволяет экономить память, поскольку в данном случае значение строки сохраняется только один раз.
Прочие экземпляры строки занимают лишь по 2 байта памяти, которая требуется для атома, вместо целого ряда байтов, необходимых для хранения копии конкретной строки.
Еще одна причина хранения строк в виде атомов состоит в том, что таблицы атомов повышают общую производительность при сравнении строк, поскольку вместо сравнения каждого байта обеих строк в данном случае сравниваются лишь 16-разрядные атомы.
2. Кроме того, атомы имеют важное значение и для обмена данными между программами.
Таблица атомов, которая является глобальной для всех процессов, называется глобальной таблицей атомов (global atom table) и используется для обмена данными между процессами. ............