[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Межпроцесное взаимодействие Pipes VS Sockets
I++
Собственно вопрос, есть ли готовые процесс менеджеры которыми Вы активно пользуетесь? В интернетах есть куча классов, но при изучения кода, авторы процесс менеджеров в случае с пайпами реализуют потенциальные deadлоки, в случае с сокетами WSAEWOULDBLOCK. Есть так же примеры на SharedMemory, но это лишь примеры. Есть конечно phpDaemon, но это крутовато smile.gif Да и либевент собирать очень не желательно.



Спустя 4 часа, 48 минут, 25 секунд (30.11.2011 - 15:25) inpost написал(а):
Не обидишься за офф-топ? Побольше бы такого обсуждения у нас на сайте, ато 99% вопросов - как выставить кодировку и почему код Попова не работает smile.gif

Спустя 4 часа, 43 минуты, 27 секунд (30.11.2011 - 20:09) vital написал(а):
А в чем проблема с либевентом?

Спустя 17 часов, 18 минут, 43 секунды (1.12.2011 - 13:27) Winston написал(а):
Свернутый текст
inpost
Цитата (inpost @ 30.11.2011 - 14:25)
Побольше бы такого обсуждения у нас на сайте

И тогда бы большинство вопросов так и остались бы не решенными, т.к. и этот smile.gif Ведь на форуме в основном новички, которые в жизни не слышали таких слов, какие I++ написал smile.gif

Спустя 2 часа, 44 минуты, 31 секунда (1.12.2011 - 16:12) I++ написал(а):
В общем начал сам писать подобный функционал на сокетах. Прогнал небольшие предварительные тесты, на тему производительности. Разницы между пайпами, шаред памятью и сокетом почти нет, правда есть некоторая разница в задержках, но задержки меня мало интересуют, если были бы критичны задержки, делал бы однозначно на либевенте и шаред памяти. 90% кода, это эксепшены и проверки smile.gif Эксепшены с буферами обмена внутри скрипта, никогда не сработают, но их учесть нужно. А не сработают они лишь потому, что объем передаваемых данных никогда не превысит, скорость их обработки. Внутренний сокет бинденный на локалхост, выдает производительность без эксепшенов выше 3 гигабит, что вообще не требуется ) Еще большей скорости можно добиться в обвязке либевента и шаред памяти. Тут уже все будет упираться в скорость памяти.

P.S Так как данные берутся с диска другими скриптами, диск тормозит скорость скрипта в целом.

Тут еще одна проблема возникла, фоновое кеширование данных с диска, для последующей передачи через сокет. Печально, что нельзя запилить тред, потому, что требуется быстрый IO, а чтение с диска замедляет ход всего скрипта, что делает задержки, в обработки данных сокета. Придется, в одном потоке ставить проверки, с сокет селектом, есть ли новые данные на сокете, если есть, не запускать чтение с диска, а если нету, то запускать чтение с диска. Но опять таки, пока будет читаться диск, на сокет могут приползти данные, и вот опять быстрый IO накрылся медным тазом )))

Так же не нашел низкоуровневых функций работы с файловой системой, есть DIO, но он не отвечает нужным требованиям. Увы не выйдет реализация фонового управления файлами и их данными на диске, с возможностью анализа фрагментации, позиций головок. dry.gif По идее это должен выполнять NCQ, но и запиливание кеширования линейного чтения с диска, для последующей передачи на сокет выгодно, когда много клиентов запрашивают разные файлы разбросанные на диске. Головкам меньше бегать приходится, а так блоками по 65к в цикле всем пишешь, рандомное чтение очень медленное.

Подобный функционал реализован например в Utorrent, правда не на php, а на C хех.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.