Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Межпроцессный обмен

505
15 марта 2007 года
vAC
343 / / 28.02.2006
Насколько я понял из МСДН, дочернему процессу нельзя унаследовать дескрипторы от функций LocalAlloc, GlobalAlloc, HeapCreate, HeapAlloc. Это означает, что никак нельзя сделать некоторую память общей для всех процессов? Просто не хотелось гонять данные через трубопровод или другие средства, т.к. на этом теряется скорость работы. Может есть какие-то способы без передачи данных? Конечно можно использовать один процесс и потоки в нем, вместо дочерних процессов, но хотелось бы сделать первый вариант...
534
15 марта 2007 года
HarryAxe
448 / / 19.01.2006
FileMapping?
3.3K
15 марта 2007 года
GENA_DJ
123 / / 08.03.2005
через общую секцию памяти в загружаемой процессами DLL-ке, файлы, пайпы, сокеты, оконные сообщения, ...
261
15 марта 2007 года
ahilles
1.5K / / 03.11.2005
c DLL врядли такая штука пройдёт.....
и ещё вариант : через реестр!
505
15 марта 2007 года
vAC
343 / / 28.02.2006
Боюсь все эти методы не подойдут..Поясню в чем дело:
Надо написать некую библиотеку, что-то вроде MPI, но не для кластера, а для многопроцессорных систем. В MPI обмен информации происходит через сокеты (если процессы на разных машинах) или с помощью системных средств (если процессы на одной машине), поэтому об общей памяти и речи быть не может, нужно всегда что-то передавать и что-то принимать. А на мультипроцессорных машинах такое возможно, если создать несколько потоков в одном процессе, тогда не придется "гонять" память. Так вот, хотелось бы это реализовать не на потоках, а на процессах. Т.е. смысла нет использовать сокеты,пайпы и др., такая библиотека уже существует :)
3.3K
16 марта 2007 года
GENA_DJ
123 / / 08.03.2005
Цитата: ahilles
c DLL врядли такая штука пройдёт.....



Пройдет точно. У Рихтера вроде был пример.

Цитата: vAC
Боюсь все эти методы не подойдут..Поясню в чем дело:
Надо написать некую библиотеку, что-то вроде MPI, но не для кластера, а для многопроцессорных систем. В MPI обмен информации происходит через сокеты (если процессы на разных машинах) или с помощью системных средств (если процессы на одной машине), поэтому об общей памяти и речи быть не может, нужно всегда что-то передавать и что-то принимать. А на мультипроцессорных машинах такое возможно, если создать несколько потоков в одном процессе, тогда не придется "гонять" память. Так вот, хотелось бы это реализовать не на потоках, а на процессах. Т.е. смысла нет использовать сокеты,пайпы и др., такая библиотека уже существует :)



На одной машине вроде тоже сокеты. О каких системных средствах речь??

505
16 марта 2007 года
vAC
343 / / 28.02.2006
Цитата: GENA_DJ
На одной машине вроде тоже сокеты. О каких системных средствах речь??



Скорей всего пайпы, т.к. там есть вариант обмениваться данными на одной машине через TCP/IP, либо, указав что машина одна, используются другие средства. Первый вариант намного тормознутее получался, чем второй.

3.3K
16 марта 2007 года
GENA_DJ
123 / / 08.03.2005
Посмотрите статью
http://msdn2.microsoft.com/en-us/library/ms686958.aspx
Возможно это и есть решение Вашей проблемы
261
16 марта 2007 года
ahilles
1.5K / / 03.11.2005
даже если система многопроцессорная все равно все методы которые мы описали все пойдут потому что память то одна!, но даже если что тоне пойдёт, то через реестр или файлы 100% попрёт
505
16 марта 2007 года
vAC
343 / / 28.02.2006
Цитата: GENA_DJ
Посмотрите статью
http://msdn2.microsoft.com/en-us/library/ms686958.aspx
Возможно это и есть решение Вашей проблемы



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

505
16 марта 2007 года
vAC
343 / / 28.02.2006
Цитата: ahilles
даже если система многопроцессорная все равно все методы которые мы описали все пойдут потому что память то одна!, но даже если что тоне пойдёт, то через реестр или файлы 100% попрёт



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

505
17 марта 2007 года
vAC
343 / / 28.02.2006
Да, работает все просто замечательно. Тестировал на больших буфферах (~500 MB) из чисел с плавающей точкой, делая арифметические операции со значениями в нем. Распараллелил на двухядерный процессор, получился коэффициент увеличения производительности 1.98, именно такой получался на многопоточном приложении. Всем спасибо!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог