Потоки PHP и синхронизация - PullRequest
6 голосов
/ 17 января 2011

Я новичок в PHP, поэтому для начала я решил реализовать синглтон.

Хотя я могу воссоздать шаблон синглтона в php, но я не уверен, как реализовать двойной-checked блокировка.

Это даже возможно / необходимо в PHP.Я где-то читал, что PHP не многопоточный?Кто-то может подтвердить это?

Если он многопоточный, кто-то может объяснить мне, как lock () или synchronize () работают в PHP?

Спасибо, Генри

1 Ответ

17 голосов
/ 17 января 2011

Архитектура без общего доступа

PHP имеет Ничего общего Архитектура

  • Как и HTTP, каждый запрос отличается
  • Общие данные передаются на уровень хранилища данных
  • Избегайте передних контроллеров

Это дает нам:

  • Возможность балансировки нагрузки
  • Невидимое переключение с одного центра обработки данных на другой
  • Лучшая модульность приложений
  • Проще разрабатывать и отлаживать

двойная проверка блокировки

но я не уверен, как реализовать двойная проверка блокировки.

Обычно за это отвечает слой базы данных. Стандарт MySQL (innodb) имеет, например, уровень строки блокировка (этого должно быть достаточно).

InnoDB блокирует на уровне строк и запускает запросы как разблокированные последовательное чтение по умолчанию, в стиль Oracle.

Если этого недостаточно, SQL также имеет, например, транзакции , чтобы это произошло.

Books Online определяет транзакцию как «последовательность операций, выполняемых как единая логическая единица работы "

Вилочные процессы

Как и на слайдах, говорят, что PHP имеет архитектуру без разделения ресурсов (традиционную), что также подразумевает, что PHP НЕ имеет потока (модель) . Хотя вы можете скомпилировать ( не включен по умолчанию ) PHP, чтобы иметь поддержку fork процессов, которые могут взаимодействовать друг с другом. Когда вы также компилируете семафорные функции , вы можете делать такие вещи, как sem_acquire и sem_release . Но в целом это не относится к PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...