Объектно-ориентированное кодирование в среде многопоточных запросов - PHP - PullRequest
2 голосов
/ 23 января 2011

Я пишу веб-приложение в объектно-ориентированном дизайне. Это приложение будет взаимодействовать с базой данных довольно часто. Несколько регулярных операций проверяют права доступа ACL пользователя для запрашиваемой функции / метода, выполняют определенные функции и т. Д. В двух словах, база данных будет использоваться очень часто. Поэтому мой вопрос здесь заключается в том, что если я разработаю свое приложение с использованием ООП и объявлю переменные уровня класса, которые будут использоваться для установки входных данных, и если будет какой-либо параллельный или параллельный запрос, поступающий от другого пользователя, будут ли входные данные быть изменены ??

Должен ли я сделать что-то отдельное, чтобы удостовериться, что приложение является многопоточным и входной вход не будет изменен до тех пор, пока процесс не будет завершен?

например:

class myProces{
var $input1;
var $input2;

    function process1($ip1, $ip2){
      $this->input1 = $ip1;
      $this->input2 = $ip2;
      $this->getDataDB();        
    }

    function getDataDB(){
     //do some database activity with the class level variables;
     // I would pass the values in the class level variables;
    $query = "select column from table where col1 = $this->input1 and col2= $this->input2"; 

    mysql_query($query);

    return something;
    }


}

Теперь, если у меня есть два пользователя, одновременно работающие с моим приложением, и я вызову функции этого класса

user1: $ obj = new myProces (); $ Obj-> Process1 (1,2);

user2: $ obj = new myProces (); $ Obj-> process1 (5,6);

Теперь, если у меня есть переменные уровня класса, они бы изменили значения, когда поступают параллельные запросы? Будет ли PHP обрабатывать несколько потоков? Я не уверен, что Apache может выступать в качестве очереди сообщений, где запросы могут быть поставлены в очередь.

Кто-нибудь может объяснить, хорош ли ООП для веб-приложений с большим количеством пользователей, или разработчики должны выполнять какой-либо многопоточный режим?

Ответы [ 4 ]

0 голосов
/ 23 января 2011

Нет необходимости беспокоиться о путанице на стороне PHP, но когда вам нужно обновить или вставить данные, наличие у нескольких пользователей возможности изменять один и тот же набор данных приведет к нежелательным последствиям.,Например, вставка повторяющихся строк или изменение одной и той же строки.Таким образом, вам нужно использовать команды SQL, такие как блокировка таблиц или строк.

0 голосов
/ 23 января 2011

Пара вещей:

  1. Это не имеет ничего общего с ООП.
  2. PHP не поддерживает пользовательские потоки

Каждый запрос будетиспользовать собственную память, поэтому вам не нужно беспокоиться о параллельном обновлении переменных за вашей спиной.

Однако вы должны позаботиться о работе с данными из базы данных.Пользователь 1 может что-то прочитать, затем Пользователь 2 может прочитать то же самое и обновить его, прежде чем Пользователь 1 закончит работу.Затем, когда пользователь 1 обновляет его, он может случайно перезаписать то, что сделал пользователь 2.

Подобные вещи можно обрабатывать транзакциями, блокировками и т. Д. Опять же, это не имеет ничего общего с ООП или многопоточностью.

0 голосов
/ 23 января 2011

Первый : попытаться узнать о PDO (если этот VAR перед переменными не означает, что вы используете PHP4).

Второй : в качестве konforce иПо словам Гроссмана, каждый пользователь получает разные экземпляры PHP.

Третий : эта проблема может возникать в Java проектах (и других), которые используют статические объекты или статические методы.,Не беспокойтесь об этом в PHP.

0 голосов
/ 23 января 2011

Вам не о чем беспокоиться. Каждое подключение к вашему веб-серверу порождает совершенно отдельный экземпляр интерпретатора PHP с совершенно разными дескрипторами памяти и ресурсов. Никакие объекты в одном не будут затронуты другим, никакие соединения с базой данных в одном не будут затронуты другим. Свойства вашего класса в одном процессе никогда не изменяются запросом в другом процессе.

Многие ведущие сайты в Интернете работают на Apache и PHP, причем сотни одновременных запросов выполняются одновременно в течение всего дня, и им не нужно писать никакого специального кода для его обработки.

...