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

Спустя 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) |
Побольше бы такого обсуждения у нас на сайте |
И тогда бы большинство вопросов так и остались бы не решенными, т.к. и этот


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

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

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