Разделяемые переменные для процессов

Модератор: Модераторы разделов

Аватара пользователя
PM85
Сообщения: 77

Разделяемые переменные для процессов

Сообщение PM85 »

Собственно пишу модуль для Апача, и столкнулся с задачей хранения глобальных переменных.
Т.к. Апач - всегда работает как многопроцессорная система, выходит, что выделенная память для данных одним потоком естественно недоступна другим.

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

Не хранить же копии соединений в каждом процессе?

Подскажите как быть с такой проблемой? Может есть другие способы разделения ресурсов памяти (доступа к ресурсам других потоков), кроме shared memory? :help:

Спасибо.
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: Разделяемые переменные для процессов

Сообщение Portnov »

Во-первых, я так и не понял, вы говорите о процессах или потоках? Это принципиально, потому что потоки выполняются в едином адресном пространстве, т.е. вся память у них общая. В отличие от процессов.

Кроме shared memory можно еще предложить передавать информацию между процессами - через pipe, sockets или еще как. Но это явно менее удобно, чем shared memory.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Разделяемые переменные для процессов

Сообщение v04bvs »

connection это во-первых сокет, во-вторых кучка служебной информации. И если кучку расшарить при желании можно (хотя драйвер, скорее всего, сойдёт с ума), то сокет расшарить будет проблематично.

В общем используйте разные соединения и всё.
Спасибо сказали:
Аватара пользователя
PM85
Сообщения: 77

Re: Разделяемые переменные для процессов

Сообщение PM85 »

Portnov писал(а):
16.04.2008 08:52
Во-первых, я так и не понял, вы говорите о процессах или потоках? Это принципиально, потому что потоки выполняются в едином адресном пространстве, т.е. вся память у них общая. В отличие от процессов.

Кроме shared memory можно еще предложить передавать информацию между процессами - через pipe, sockets или еще как. Но это явно менее удобно, чем shared memory.


Извиняюсь, описался - речь идёт только о процессах. С потоками такой проблемы не возникло бы. Pipe, sockets и пр. удобны для разделения статичных ресурсов, в данном случае всё сложнее.

v04bvs писал(а):
16.04.2008 11:16
connection это во-первых сокет, во-вторых кучка служебной информации. И если кучку расшарить при желании можно (хотя драйвер, скорее всего, сойдёт с ума), то сокет расшарить будет проблематично.

В общем используйте разные соединения и всё.


Я к этому мнению в общем-то тоже начал склоняться. Жаль - лишняя потеря ресурсов.

Спасибо.
Спасибо сказали: