Форкирует ли нить?
Когда мы разворачиваем процесс, пространство процесса, то есть область памяти, где находятся библиотеки и код, которые требуется выполнить процессу, повторяется, отдельные, но связанные процессы затем продолжают выполняться по желанию планировщик операционных систем в разных областях памяти.
В чем разница между процессом Forked и Thread?
Когда мы создаем Thread, мы говорим операционной системе, что хотим, чтобы другая единица исполнения могла работать в той же области памяти, что и процесс, который ее создал.
Как разные операционные системы фактически реализуют потоки и процессы, выходит за рамки этого ответа и не имеет значения.
Почему на передней панели возникает плохая идея?
При копировании всего адресного пространства вы дублируете область памяти, в которой работает веб-сервер, это, очевидно, может привести к хаосу для вашей операционной системы.
Зачем наводнение плохой идеей на фронте?
Если клиентский скрипт инструктирует операционную систему создавать 8 потоков в прямом ответе на веб-запрос, а 100 клиентов одновременно запрашивают сценарий, вы будете инструктировать, чтобы ваша операционная система выполняла 800 потоков одновременно.
ЦП и операционные системы должны были бы выглядеть очень сильно, чтобы сделать это хорошей идеей!
Где Threading хорошая идея?
Многопоточное программное обеспечение и чрезвычайно надежное оборудование, является вездесущим; вычисление не было бы тем, чем оно без него.
В контексте веб-инфраструктуры mysql и другие серверы баз данных являются многопоточными, а Apache может развернуть PHP в многопоточной инфраструктуре, хотя я бы не рекомендовал его.
Когда мы рассматриваем, как предприимчивые приложения, такие как mysql, фактически предоставляют свои чрезвычайно сложные сервисы, мы видим, что их процесс (и, следовательно, потоки) полностью изолирован от инфраструктуры вашего веб-приложения.
Так мы используем Threads на языках, которые их поддерживают; мы разрабатываем системы, средства которых предоставляют свои услуги через простую форму IPC, мы полностью изолируем нашу комплексную инфраструктуру от того, что должно быть простым: наши веб-приложения.
Действительно ли PHP подходит для потоков?
Модель памяти для PHP не имеет ничего общего: это означает, что каждый контекст интерпретатора в смысле структур и памяти, которые требуется PHP для работы, изолирован от любого другого контекста.
Этот всегда должен быть правдой для PHP, чтобы он работал по назначению; реализация потоковой передачи для PHP, которая не знала, как работает PHP, просто не будет функционировать.
Pthreads идет на большие длины, чтобы обеспечить модель памяти не нарушена, каждая тема действительно не разделяет память непосредственно с любой другой Thread.
Действительно ли темы подходят для меня?
Во-первых, серьезно задуматься над следующими вопросами:
- ли Threading действительно необходимо?
- Какие еще способы вы можете найти для достижения того, что вы собираетесь делать?
Многопоточное программное обеспечение является сложным по своей природе; что-то сложное не является оправданием для того, чтобы избежать этого, на мой взгляд.
Но имейте в виду, что многопоточное программное обеспечение принципиально отличается от вашего обычного приложения PHP, вы должны думать о вещах, о которых вам никогда не приходилось думать раньше, помните о вещах, которые не имели значения, прежде чем вы начали свой первый Нить.
Вы не должны угадать, что это такое, вы должны стараться как можно полнее воспитывать себя в предмете и даже быть готовым к неудаче и упорству.
Сложность ничего уменьшается по мере увеличения знаний, это как обучение работает, вот где она начинается:
https://gist.github.com/krakjoe/6437782
Он по-прежнему в руководстве, во многих примерах, распределенных с Pthreads, в StackOverflow поиски и вопросы, а также результаты в славе, на мой взгляд.
Вы проверили комментарии на странице [docpage] функции (http://php.net/manual/en/function.pcntl-fork.php)? Они могут быть довольно просвещенными. – raina77ow
Прошу прощения, мне это не приходило в голову. Я буду смотреть в него. –
Процесс forking часто является важной функцией для автономных приложений, а не в контексте запуска PHP в веб-сервере. – mario