|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
В общем задача: при вызове скрипта чтобы он максимум в !5 флопов! дал метку что его вызвали другим скриптам... вариант с файл.lock - не попадает ((( $_SESSION - ну вообще... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2017, 16:23 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
Чем file.lock не подходит? Через memcache наверное можно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2017, 06:34 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
Не успевает ( ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2017, 08:17 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
Не успевает что? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2017, 08:38 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
5 флопов - это ж по нынешним меркам что-то около нуля по времени. Учитывая, что интерпретатор PHP делает валидацию перед непосредственно исполнением скрипта, сомневаюсь, что такая схема вообще сработает. А вызывающий скрипт не может сделать уведомление о запуске заранее? Ну, как вариант, конечно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2017, 16:50 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
в том то и беда что часть запросов попадает с разницей что-то около нуля... и из-за этого дубли. HettНе успевает что?не успевает образоваться файл.lock до проверки на него наличия по итогу проскакивают 3-4 дубля... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 07:38 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
http://php.net/manual/ru/memcache.add.php Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 08:04 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
re_qasв том то и беда что часть запросов попадает с разницей что-то около нуля... и из-за этого дубли. HettНе успевает что?не успевает образоваться файл.lock до проверки на него наличия по итогу проскакивают 3-4 дубля...Что-то вы неправильно делаете... Код: php 1.
либо файла не было, он создался и вернулся хендл, либо файл был, случилась ошибка создания и вернулся null. Никак не могут два скрипта одновременно создать один и тот же файл. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 08:10 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
Barlonere_qasв том то и беда что часть запросов попадает с разницей что-то около нуля... и из-за этого дубли. пропущено... не успевает образоваться файл.lock до проверки на него наличия по итогу проскакивают 3-4 дубля...Что-то вы неправильно делаете... Код: php 1.
либо файла не было, он создался и вернулся хендл, либо файл был, случилась ошибка создания и вернулся null. Никак не могут два скрипта одновременно создать один и тот же файл.я проверяю Код: php 1. 2. 3. 4. 5. 6.
и умудряются лезть дубли ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 20:17 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
$file откуда берется? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 20:20 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
ну понятно что $file = 'file.lock' а потом в алге идет fclose($fp) и unlink($file) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 20:21 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
re_qasну понятно что $file = 'file.lock' а потом в алге идет fclose($fp) и unlink($file) точнее Код: php 1.
и дальше именно по этому $bid идет запрос на то что нужно добавить, если по $bid возвращается false то естественно не то... ну и в логах по три-четыре раза реально int и 1=1 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 20:37 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
хочется заменить на что-то рода Код: php 1. 2. 3. 4. 5.
но соответственно сессии разные ((( ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 20:44 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
re_qasя проверяю Код: php 1. 2. 3. 4. 5. 6.
и умудряются лезть дублиНе может быть такого дикого бага в РНР, это бы давно заметили... Полностью код покажите. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 20:45 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
Кстати, тут у вас проверяется один файл, а создается другой... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 20:49 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
re_qas, Исходную задачу опишите подробно. Возможно, найдется какой-то другой способ решения. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 20:55 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 20:59 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
vklere_qas, Исходную задачу опишите подробно. Возможно, найдется какой-то другой способ решения.при активной сессии организовать автодобавление через апи с сайта А на сайт Б новых данных. ограничения: активная сессия должна быть к двум сайтам (крон отпадает), ограничение авторизации именно апи... второй нюанс активных сессий - 1500 +/-... период обновления - раз в 5 минут... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 21:04 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
re_qasактивных сессий - 1500 +/-... период обновления - раз в 5 минут...Вот тут не вполне понятно. Обновлялка одна на все сессии или же у каждой сессии своя (вроде, отдельный запуск скрипта с определенными параметрами)? В каком именно местеre_qasпо итогу проскакивают 3-4 дубля...? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 21:11 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
vkleВ каком именно местеre_qasпо итогу проскакивают 3-4 дубля...? именно при пробросе с апи в бд... vklere_qasактивных сессий - 1500 +/-... период обновления - раз в 5 минут...Вот тут не вполне понятно. Обновлялка одна на все сессии или же у каждой сессии своя (вроде, отдельный запуск скрипта с определенными параметрами)? одна. параметры для обновления различаются только при инициализации cmf при инициализации авторизации сервер-сервер по апи, дальше только $bid при этом в части обработки есть проверка Код: php 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 21:16 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
вообще сложилось такое впечатление что 3-4 процесса (условно сервер 8 ядерный, пхп х86) срабатывают абсолютно параллельно ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 21:23 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
re_qasодна.В смысле, должен произойти единственный запуск скрипта. Параметры запуска один раз вычислили и любая попытка запуска должна использовать именно их. Правильно понимаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 21:24 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
re_qasвообще сложилось такое впечатление что 3-4 процесса (условно сервер 8 ядерный, пхп х86) срабатывают абсолютно параллельноСам по себе PHP однопоточный. Пока не запустишь отдельный процесс (форком или внешним скриптом запуска), не будет ничего параллельного. Конечно, есть вариант, когда при нескольких конкурирующих попытках запуска требуется обеспечить гарантировано один экземпляр запущенного скрипта. Тогда обычно использую такую пару строк: Код: php 1. 2.
У меня с этих строк по крону стартуют относительно долгоиграющие скрипты когда заранее невозможно определить предполагаемую продолжительность работы скрипта. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 21:32 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
vklere_qasодна.В смысле, должен произойти единственный запуск скрипта. Параметры запуска один раз вычислили и любая попытка запуска должна использовать именно их. Правильно понимаю?именно этой части идет наличие по uri $bid через пост и проверка дольше только то этому одному параметру... само добавление ветвлится но на другие $bid перепрыгнуть не может - $bid - корень... новый появляется 4-10 раз в 5 минут... раз в 5 минут у всех 1500+ срабатывает запрос на обновление... этот запрос возвращает список $bid, по которому пинается скрипт на добавление по принципу кто первый от того и добавим - остальных нах... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 21:34 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
vkle Код: php 1.
по логике должен сработать аналогично fopen(..,'x') если есть вернет false.... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 21:39 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
а если стоит raid-storage-claster то не может быть проблема в том что мой файловый разбит на несколько сервов? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 21:41 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
re_qasvkle Код: php 1.
по логике должен сработать аналогично fopen(..,'x') если есть вернет false....Ну так fopen там (в первой строчке) и используется, только ориентирован он не на относительно медленное создание нового файла в ФС, а на обращение к уже существующему и прочитанному с диска (хранящемуся в файловом буфере) файлу. В этом смысле область такого использования несколько ограничена. Если правильно понимаю внутреннюю кухню PHP, в данном случае flock лишь вызывает системную функцию блокировки файла. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 21:45 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
re_qasа если стоит raid-storage-claster то не может быть проблема в том что мой файловый разбит на несколько сервов?Полагаю, если каталог или цепочку каталогов, где создается файл, требуется читать с диска - возможно, это будет долгим процессом. Если каталог не вымывается из буфера ФС - вряд ли. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 21:50 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
vklere_qasпропущено... по логике должен сработать аналогично fopen(..,'x') если есть вернет false....Ну так fopen там (в первой строчке) и используется, только ориентирован он не на относительно медленное создание нового файла в ФС, а на обращение к уже существующему и прочитанному с диска (хранящемуся в файловом буфере) файлу. В этом смысле область такого использования несколько ограничена. Если правильно понимаю внутреннюю кухню PHP, в данном случае flock лишь вызывает системную функцию блокировки файла.нет... тут именно проверка "r+"... т.е. лишнее телодвижение процессора в части открыть и потом заблокировать, 'x' сразу именно создает, и если файл уже есть - ошибка... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 21:53 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
vklere_qasа если стоит raid-storage-claster то не может быть проблема в том что мой файловый разбит на несколько сервов?Полагаю, если каталог или цепочку каталогов, где создается файл, требуется читать с диска - возможно, это будет долгим процессом. Если каталог не вымывается из буфера ФС - вряд ли.попинаю завтра админа проверить где моя часть массива сидит... межсерверовая пинговка <1ms но если с запросом по файлу... то реально может быть косяк... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 21:55 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
re_qasvkleпропущено... В смысле, должен произойти единственный запуск скрипта. Параметры запуска один раз вычислили и любая попытка запуска должна использовать именно их. Правильно понимаю?именно этой части идет наличие по uri $bid через пост и проверка дольше только то этому одному параметру... само добавление ветвлится но на другие $bid перепрыгнуть не может - $bid - корень... новый появляется 4-10 раз в 5 минут... раз в 5 минут у всех 1500+ срабатывает запрос на обновление... этот запрос возвращает список $bid, по которому пинается скрипт на добавление по принципу кто первый от того и добавим - остальных нах... Возможно, я бы сделал как-то так. Обозначу основные моменты. 1. Запуск единственного экземпляра основного скрипта. По крону или другим образом - не суть важно. 2. Там бесконечный цикл с проверкой нового $bid и sleep порядка нескольких десятков секунд исходя из условия "новый появляется 4-10 раз в 5 минут". Если проверка наличия нового не сильно ресурсожруча - можно и почаще проверять. 3. Если найден новый $bid - переходим в ветвь добавления/обновления. Если само по себе обновление окажется процессом слишком длительным и не укладывается в приемлемое время - тогда, вероятно, сделал бы форк скрипта или (более вероятно) системный вызов с запуском скрипта добавления без ожидания завершения. Но тут надо дополнительно контролировать количество дочерних процессов, чтоб выше крыши не наплодить, так как без контроля в случае перегрузки сервера Load Average будет расти лавинообразно (процессы не успевают отрабатывать). Да, и у форка есть куча неожиданных и, порою, не совсем приятных особенностей. Как-то вот в такую сторону стал бы смотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 22:10 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
re_qasпроверка "r+"... т.е. лишнее телодвижение процессора в части открыть и потом заблокировать,А вот и не угадали. :-) Ибо сам __FILE__ (этот самый файл скрипта, который содержит эту строчку кода) в момент исполнения скрипта уже "открыт" - прочитан с диска и загружен в оперативную память совсем недавно. И, наверняка, сам файл или указатель на него ещё не был удален из буфера. Остается только сделать попытку исключительной блокировки. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 22:14 |
|
PHP межпроцессовое взаимодействие
|
|||
---|---|---|---|
#18+
re_qasvkleпропущено... Полагаю, если каталог или цепочку каталогов, где создается файл, требуется читать с диска - возможно, это будет долгим процессом. Если каталог не вымывается из буфера ФС - вряд ли.попинаю завтра админа проверить где моя часть массива сидит... межсерверовая пинговка <1ms но если с запросом по файлу... то реально может быть косяк...Пингу (ICMP пакету) не требуется шкрябать головками дисков, так что, это совсем не показатель. Заодно, чтоб два раза не бегать, поинтересуйтесь у админа о наличии на сервере локальной файловой системы типа memory и возможности доступа скрипта к ней. Нередко бывают какие-нибудь tmpfs с такой организацией размещения. Если файл блокировки делать там, оно, скорее всего, будет работать существенно быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 22:39 |
|
|
start [/forum/search_topic.php?author=preedeell&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
139ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 801ms |
total: | 1058ms |
0 / 0 |