Ответ 1
Это классический сценарий для проблемы Producer-Consumer
. Просто у вас их двое. Вы можете решить проблему, чтобы понять ее легче.
-
WebSocket Consumer. Этот код отправит данные через WebSocket. Вы можете рассматривать это отдельный поток, в котором данные удаляются из
Q1
(только имя) и отправляются. -
Производитель WebSocket. Когда некоторые данные поступают в Gate WebSocket, они помещаются в буфер. Это просто, что это не та же очередь, что и выше. Назовите его
Q2
. Это также должен быть отдельный поток, и этот поток переходит в спящий режим, как только он выдает данные и сигнализирует соответствующему потребителю. -
Жесткий потребитель. Этот код будет делать то же самое, что и WebSocket Consumer, единственное отличие состоит в том, что он будет хранить данные на жестком диске вместо WebSocket. Он будет иметь свой собственный поток и работает с
Q2
. -
Производитель HDD. Я уверен, что вы можете догадаться, что это делает. Этот код будет считывать данные с жесткого диска и помещать его в очередь
Q1
. Как и все производители, он должен сигнализировать своим потребителям, информируя их о новом элементе в очереди.
Теперь, возвращаясь к вашему коду, PHP не подходит для многопоточного программирования, даже если это полностью возможно. Вот почему вы не можете найти много примеров для этого. Но если вы настаиваете, вот что вам нужно:
-
класс PHP Mutex. Этот класс поможет вам предотвратить одновременный доступ к одним и тем же данным нескольким потокам.
-
Что-то вызывать
Signaling
, которое я не могу найти в PHP! Это использовано сообщить другим потокам, что некоторые данные в очереди готовы быть или, другими словами, он пробудит потребительский поток когда ему что-то нужно делать.
Заключительное слово состоит в том, что в правильном многопоточном программном обеспечении вы не будете использовать функцию sleep
, чтобы снизить системную нагрузку/предотвратить сбой системы. Многопоточное программирование предназначено для сигнализации и разговора между потоками.