Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.
Обмен данными между процессами с использованием mmap. Анонимная область памяти
Материал сегодняшней статьи посвящён использованию mmap во взаимодействии между процессами. Придётся вспомнить многозадачность и os.fork(). В противном случае материал будет не понятен. Вот эти мои материалы вам в помощь: видео, статья.
Задача данной статьи следующая: использовать механизм анонимной области памяти для взаимодействия родительского и дочернего процессов. Класс mmap позволяет создавать объекты без указания реального файла. Для этого в качестве дескриптора указывается -1.
Ниже представлена программа, в которой родительскиё и дочерний процессы взаимодействуют через анонимную область памяти, периодически записывая туда обобщения для другого процесса.
Пояснение к программе
- В первую очередь обратим внимание на создание объекта с отрицательным дескриптором файла. mmap(-1, n) и создаёт анонимную область памяти длиной n байтов.
- В предыдущей статье я уже писал, что когда работаешь с памятью - нужно помнить о кодировке. Поэтому в программе считывается и записывается вся область памяти. При попытке записывать только часть области можно оказаться в ситуации, когда меняется часть кода символа. В результате вы можете получить потом ошибку при чтении и перекодировке. В нашем же случае как раз используются символы русского алфавита, которые кодируются двумя байтами.
- Принцип взаимодействия процессов в программе очень прост. Они периодически проверяют общую область памяти, ожидая, когда появится сообщение от другого. И здесь особо комментировать нечего, нужно просто внимательно посмотреть на код и вспомнить про os.fork().
Ну, пока всё!
Пишите свои предложения и замечания, и занимайтесь программированием, а также проектированием баз данных, хотя бы для поддержания уровня интеллекта.