PHP и параллелизм

:!cat %| grep -c "pattern"

Это не точно команда энергии, но это даст Вам, в чем Вы нуждаетесь от энергии.
можно отобразить его на команду, если необходимо часто использовать его.

7
задан Zachary Wright 11 November 2009 в 03:40
поделиться

5 ответов

ЕСЛИ ваша реальная проблема больше, чем этот простой пример, вы должны использовать транзакцию в сочетании с таблицами блокировок, чтобы пользователи не перезаписывали друг друга.

5
ответ дан 6 December 2019 в 07:26
поделиться

Основные базы данных предназначены для обработки таких ситуаций.

При использовании MySQL механизм хранения InnoDB имеет функцию блокировки строк, которая блокирует строку, в которую выполняется запись. Таким образом, любой запрос на обновление той же строки будет ждать завершения предыдущей операции над строкой.

Если вы используете механизм хранения MyISAM, он блокирует всю таблицу при обновлении строки. Это создает блокировку на сервере, когда несколько игроков одновременно отправляют запросы на обновление. Так что все зависит от того, какую базу данных и, в частности, какой механизм хранения вы используете для этой цели.

4
ответ дан 6 December 2019 в 07:26
поделиться

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

2
ответ дан 6 December 2019 в 07:26
поделиться

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

В большинстве случаев изменения происходят достаточно быстро, так что конфликт за блокировку минимален. Но это все равно может произойти, поэтому вам необходимо проверить статус ошибки, возвращаемый после выполнения запроса SQL. Функция mysql_query () возвращает FALSE , если есть проблема.

Затем вы можете выяснить причину (конфликт обновления, недостаточные права доступа, синтаксическая ошибка SQL и т. Д.), Вызвав mysql_errno () . См. http://dev.mysql.com/doc/refman/5.1/en/error-messages-server.html для справки по кодам ошибок MySQL.

1
ответ дан 6 December 2019 в 07:26
поделиться

Сохраните логику в БД, эта семантика в основном решена за вас.

update teams
set score = score + 1
where team_id = 1

.. или любой другой результат и любой номер команды.

11
ответ дан 6 December 2019 в 07:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: