Php что такое nts

Php что такое nts

Внимание! Данная статья безнадежно устарела или теперь оценивается автором, как не имеющая информационной пользы.

Прелесть open-source кода в его открытости :)) Т.е. при наличии ума/времени/желания можно разобраться, как именно работает программа. Обратная сторона такого кода — сложность в получении нужных скомпилированных пакетов. Например, PHP можно скачать в виде исходников для Nix-систем с последующей компиляцией/сборкой. Для Windows все уже собрано, но готовых бинарных пакетов много! Варианты с «thread safe/non thread safe«, VC6/VC9 и разные версии самого PHP. Статья создана для прояснения ситуации. В основе — разные источники, частично — перевод с английского. Все для того, чтоб в следующий раз мне опять не разбираться — «че к чему!?».

Нужная версия PHP зависит от версии веб-сервера, на котором он будет использоваться. Например, Apache 1.3.x работает с РНР версии 3.0.х, Apache 2.х работает с РНР версии 4.0 и выше. Но это не такая уж проблема, ориентируйтесь на более новые стабильные релизы и то, что стоит у хостера.

Что за приписки VC6, VC9, VC11? Исходники PHP под Windows компилируются в Visual Studio. VC9 получается при компиляции в VS 2008, VC11 — Visual Studio 2012. Соответственно, чтобы все это дело у вас работало, на компе должны быть установлены библиотеки Visual C++ Redistributable for Visual Studio соответствующего года. Некоторые разъяснения по этому поводу здесь.

Кроме того, если web-сервером у вас будет старенький Apache с сайта apache.org, то нужно качать VC6 версии PHP, для компиляции которых использовался Visual Studio 6. Если же PHP будет работать для IIS или в связке с более новым Apache, то можно собрать что-нибудь посовременнее 😉

Читайте также:  opacity

Для меня главным ступором в выборе служит хостер. Сейчас есть стабильная версия PHP 5.5.4, а у него до сих пор 5.2.17!

Теперь самая интересная часть: «thread safe or non thread safe?»
Вольный перевод статьи Difference between PHP thread safe and non thread safe binaries (Dominic Ryan, 27.09.2007)

Я настолько ломанного английского еще не видел :(( Хотел по-быстрому перевести статью, но с трудом понимаю, что автор понаписал. Постоянные переходы между «what-is-that» и сложно-составные предложения вообще выносят мОСк. Перевод на русский так же осложняется тем, что у меня не хватает знаний и фантазии как правильно по-русски должно называться то, что обычно пишется только на английском %) Например техническое понятие «multi proccess architecture» я ни разу не видел на русском, а мой перл «потоко-небезопасные» вообще под вопросом здравого смысла. Вообщем, что получилось, то привожу.

Разница между thread safe и non thread safe бинарными пакетами PHP

С тех пор, когда PHP впервые появился под Windows 20 октября 2000 года в версии PHP 3.0.17, его бинарные пакеты всегда были собраны как потоко-безопасные (thread safe, TS). Основание следующее: Windows использует мульти-поточную архитектуру работы, а Nix-системы поддерживают мульти-процессовую архитектуру. Если PHP был скомпилирован как мульти-процессовое CGI-приложение вместо мульти-поточного, то его использование в качестве CGI-модуля под Windows на сервере IIS приводит к сильным тормозам и загрузке процессора. С другой стороны, можно подключить PHP на IIS, как ISAPI-модуль (требуется мульти-поточная сборкаприм. переводчика). Тогда возникает другая проблема: некоторые популярные расширения PHP разработаны с ориентиром на Unix/Linux, т.е. с мульти-процессовой архитектурой, что приводит к краху PHP, подключенному на IIS в качестве ISAPI-модуля. Т.о. создание CGI — наиболее стабильная среда для PHP на IIS с основным недостатком, что это ужасно медленно. Приходится загружать и выгружать всю среду PHP из памяти каждый раз, когда есть запрос.

В то время было несколько вариантов для увеличения производительности PHP на IIS. Первый — использовать кеширование опкода программами типа eAccelerator, которые сохраняют PHP-скрипты в частично скомпилированном состоянии на диске и/или в памяти. Такой подход значительно сокращает время выполнения скрипта. Другой вариант заключался в настройке IIS на использование PHP в режиме FastCGI. При этом PHP-процесс после отработки не закрывался, а получал новое задание с очередным php-запросом. К тому же можно было запустить несколько PHP-процессов одновременно, ощутимо ускоряя обработку запросов, что являлось бонусом CGI-режима PHP. При этом могли быть незначительные проблемы с совместимостью PHP-расширений. Это по-прежнему самый быстрый способ использования PHP, и именно на задание такой конфигурации IIS настроен установщик «IIS Aid PHP Installer».

Бинарники, собранные в потоко-небезопасном режиме (non thread safe, NTS), позволяют сконфигурировать IIS (и другие веб-сервера под Windows) на использование PHP, как стандартный CGI-интерфейс с сильным приростом производительности, т.к. в этом случае (в такой сборке) PHP-процессу не нужно дожидаться синхронизации нитей. При сравнении работы «thread safe» и «non thread safe» бинарных пакетов PHP на IIS в качестве стандартного CGI-интерфейса прирост быстродействия составляет до 40%, но это все равно не так шустро как использование опкода в FastCGI методе. А самый большой косяк в том, что нельзя стабильно использовать потоко-небезопасные бинарники вместе с потоко-безопасными. Это значит, что вы не можете использовать системы кеширования опкода типа eAccelerator в среде PHP, созданной потоко-небезопасными бинарными пакетами (утверждение, верное на момент написания статьи).

Если потоко-небезопасный PHP нельзя сконфигурировать до такой же скорости, что и потоко-безопасную среду, то зачем он нужен в такой сборке? Возвращаемся к FastCGI и разработкам Microsoft в этой области за последние несколько лет. Кодеры мелкомягких создали свой вариант FastCGI, который позволяет конфигурировать потоко-небезопасные бинарники PHP в режиме FastCGI, что доводит производительность до скорости света 🙂

Из статьи я сделал вывод, что тормоза наблюдаются только при использовании с веб-сервером IIS. В любом случае, тупняков под Windows+Apache я не видел. В ней же сказано, что можно разогнать NTS-сборку на любом веб-сервере, но я не представляю себе такой конфиг Apache.

Понравилась статья? Расскажите о ней друзьям:

Источник

Почему существует 2 версии PHP (Non Thread Safe и Thread Safe)?

Здравствуйте.
На сайте PHP для загрузки доступны 2 версии: Non Thread Safe и Thread Safe.
Если я правильно понимаю, версия Thread Safe нужна для того, чтобы была возможность использовать расширение pthreads. Но если есть версия Thread Safe зачем до сих пор собирается версия с Non Thread Safe?
Какие недостатки есть у версии Thread Safe (больше накладных расходов, уменьшенная производительность, etc)?
Благодарю за ответы.
С уважением.

zoonman

Для тех, кто не знает английский.

Версию сервера нужно выбирать в зависимости от того, как вы интегрируете PHP c веб-сервером.
Например, когда вы используете mod_php, у вас модуль и PHP всегда загружены в память и каждый запрос обрабатывается в отдельном потоке. Из-за этого mod_php работает быстрее, чем CGI. В данном случае нужно использовать потоко-безопасную реализацию (thread-safe) поскольку каждый поток имеет доступ к памяти другого потока.

Когда вы работаете с IIS, у вас PHP запускается ввиде отдельного процесса через CGI и в таком случае потоко-безопасность не имеет смысла, поскольку у вас 1 процесс и фактически 1 поток созданный этим же процессом. Операционная система изолирует память процессов по умолчанию.

В случае модели с FastCGI, потокобезопасность также не имеет смысла, поскольку тотже PHP-FPM держит несколько отдельных процессов PHP в памяти, но не потоков.

Источник

Русские Блоги

ts(Thread-Safety) То есть безопасность потоков, при многопоточном доступе применяется механизм блокировки. Когда поток обращается к определенным данным этого типа, он защищен. Другие потоки не могут получить доступ, пока поток не прочитает их. Другие потоки могут только использовать его. Не будет несогласованности или загрязнения данных. Выберите эту версию, когда PHP загружается в ISAPI. Выберите эту версию, когда PHP загружается в ISAPI.

nts(None-Thread Safe) То есть он не является потокобезопасным, то есть защита доступа к данным не обеспечивается. Возможно, несколько потоков могут изменять данные один за другим. Результатом являются грязные данные. Когда PHP работает в быстром режиме cgi, выберите эту версию, которая имеет лучшую производительность;

ISAPI (Интерфейс программирования приложений Интернет-сервера) обычно относится к загрузке HTTP-сервером, работающим в виде серверного модуля, предложенного Microsoft, поэтому он может работать только на платформе win, такой как apache, iis под win [говорят, что используется быстрый способ cgi Работа более стабильна], а php в Linux работает как модуль Apache или php-fpm.

cgi (Общий интерфейс шлюза): инструмент, позволяющий HTTP-серверу «разговаривать» с программами на вашем или других машинах. Проще говоря, cig — это фоновый язык, который может взаимодействовать с сервером. В настоящее время php работает как независимая программа. Характеристика — потребление памяти.

fast cgi. Это долгоживущий CGI, который может выполняться все время, пока он активирован, каждый раз не требуется времени на форк. Этот метод представляет собой открытое расширение CGI с масштабируемой архитектурой, не зависящее от языка. , Его основное поведение — сохранить процесс интерпретатора CGI в памяти и, таким образом, получить более высокую производительность.

Метод выполнения ISAPI используется в виде динамической библиотеки DLL. Он может быть выполнен после запроса пользователя. Он не исчезнет сразу после обработки запроса пользователя. Поэтому проверки безопасности потоков необходимы для повышения эффективности выполнения программы. Для выполнения PHP с ISAPI рекомендуется выбрать версию ThreadSafe.
Метод выполнения FastCGI заключается в выполнении операций в одном потоке, поэтому нет необходимости выполнять проверки безопасности потоков. Удаление защиты проверок безопасности потоков может повысить эффективность выполнения. Следовательно, если используется FastCGI Для запуска PHP рекомендуется выбрать версию NonThread Safe.
Проверьте элемент Thread Safety с помощью phpinfo () ;. Этот элемент предназначен для проверки, является ли он потокобезопасным. Если он: включен, обычно это должна быть версия ts, в противном случае — версия nts.

Вышеупомянутая разница между TS и NTS в PHP для всех.

Источник

Оцените статью