Порушення discussion thread php. Вибір версії PHP для Windows. Різниця між thread safe та non thread safe бінарними пакетами PHP

Увага!Ця стаття безнадійно застаріла або тепер оцінюється автором, як така, що не має інформаційної користі.

Принадність 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, то можна зібрати щось сучасніше;)

Для мене головним ступором у виборі є хостер. Зараз є стабільна версія PHP 5.5.4, а в нього досі 5.2.17!

Тепер найцікавіша частина: " thread safe or non thread safe?"
Вільний переклад статті (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.

Threaded discussion

A threaded discussionє електронна розмова (такий як один за допомогою електронної пошти , електронної пошти , повідомлень електронної пошти , newsgroup , або Internet forum) в якому програмне забезпечення використовується для користувача, використовуючи персоналізовані повідомлення. Messages є зазвичай grouped visually in a hierarchy by topic. Set set messages grouped in this way is called a topic threadабо simplly "thread". На дискусійному форумі, електронною поштою клієнта або новиною клієнта є доглядати за "трейдованими топіками", якщо його групи повідомлені на самій топічній картці разом з можливістю читання в цьому manner. Moreover, threaded discussions типово allow users to reply до особливих повідомлень within a topic"s thread. Як результат, there can be a hierarchy of discussions within thread topic. називається Threaded Mode. (Антенсивний стає Linear Mode, який типово зображений на всіх повідомленнях в межах терміну, незважаючи на те, що він має specifically replied to whom.)

Advantages

Відмінність hierarchically threaded views is that the allow the reader to appreciate quickly the overall structure of conversation: specifically who is replying to whom. Як це є найбільш можливим в роботі з розширеними розвідками або розмовами, такими як newsgroups: індеїд, для реально комплексної розмови, це стрімко стає неможливим до наступного argumentу без будь-якого sort hierarchical threading system in place.

Інший benefit is in more subtle appreciation of community in hierarchically threaded systems. Як responses have to be made to specific posts, they are also made to specific individuals. Запитання повідомлень єдля того, щоб розглянути повідомлення на конкретних переглядах і особистісності особистих речей. Цей випадок less in fora where latest comment is just inserted in the general pool.

Disadvantages

Відповідальність hierarchical threading over flat threading is increased level of complication, and such a view therefore requires increased level of comfort and sophistication on the part of its users. Це невідомо, що його придбання буде бути невідомим в деяких oldest і/або most sophisticated of online communities, так як Usenet , CIX or Slashdot . Web chat and comment systems are, by comparison, younger and open to a wider audience, and as such hierarchical threading is only recently becoming commonplace in such arenas.

Imposing a tree hierarchy і tends to fragment discussion within topic: it no longer becomes possible to post a message responding to or summarising several different previous posts. Instead, every previous post must be respond to individually. Це arguable те, що це тягнеться до більш суперечливого ділового стилю в тому, що використовує hierarchical threading. However, true though that may be, if a direct threaded reply is no longer possible due to volume of replies to the desired post, users are now often using quotes by person they are responding to in order to keep conversation on track and flowing smoothly. Це було зараховано до найбільшого повідомлення комунікації в тому випадку, що threading буде відповідати його іншимвирішення.

Open thread

На Open Thread refers to a blog post where readers мають коментарі і discuss any topic that they choose. Вони завжди мають багато useful on popular blogs with large amounts of traffic ; Вони будуть використані, коли власник blogу не має ніякого суб'єкта, щоб повідомити про те, або якщо є ull in posting.

Open threads є також використані для переміщення монотонів posts на головних сторінках blogs. Comments may build up on content-oriented posts; там, якщо користувачі використовуються в Open threads so page load times won"t be slowed down.

Examples

* Yahoo! Groups [ http://groups.yahoo.com/] , MSN Groups [ http://groups.msn.com/] and Slashdot [ http://www.slashdot.com/] Все з веб-основних forums that feature threaded discussions.

See also

* Scholarly Skywriting
* List of blogging terms

References

*Dartmouth. (2003). [ http://www.dartmouth.edu/~webteach/articles/discussion.html "Taking discussion online" ]
*Wolsey, T. DeVere, [ http://www.readingonline.org/Articles/Art_index.asp?]. "Reading Online", 7(4), January/February 2004. Retrieved December 30, 2007

Wikimedia Foundation. 2010 .

  • Leon Powe
  • Barh Azoum

Look at other dictionaries:

    Internet forum- phpBB Internet Forum software package, один з найбільш популярних forum packages ... Wikipedia

    History of virtual learning environments 1990s- У історії віртуальних навколишнього середовища, 1990-х років був зростанням, в першу чергу, щоб привести до повного комп'ютера і Internet.1990s1990* Formal Systems Inc. of Princeton, NJ, USA introduces a DOS заснований Assessment… … Wikipedia

    CoFFEE- Collaborative Face to Face Educational Environment Developer(s) LEAD consortium Stable release 5.0 / June 2010 Operating system Cross platform … Wikipedia

    Conversation threading- Це feature використовує багато електронних клієнтів, бюлетені boards, newsgroups, або Internet forums в яких програма електронної пошти використовується для користувача, використовуючи групові повідомлення. Messages є зазвичай grouped visually in a hierarchy by topic. A set of messages grouped… … Wikipedia

    Slashdot- Screenshot of Slashdot.org Головна сторінка URL slashdot.org Slogan News for nerds. Stuff that matters … Wikipedia

    MediaWiki- namespace redirects here. Для того, щоб зареєструвати MediaWiki namespace на Wikipedia, viz Help:MediaWiki namespace. Для загальної інформації про Wikipedia namespaces, viz Wikipedia:Namespace. Talk page and MediaWiki Talk page redirect here. For… … Wikipedia

    Computer-mediated communication- Для інших засобів, бачте CMC (disambiguation). Комп'ютерний mediated communication (CMC) є визначений як будь-який комунікаційний transaction, що висловлюються через використання двох або більше мережевих комп'ютерів. While the term has traditionally referred to those… … Wikipedia

    Comparison of wiki software- Наведені таблиці compare загальні та технічні відомості для числа wiki software packages. Contents 1 General information 2 Target audience 3 Features 1 4 Features 2 … Wikipedia

    Scholarly Skywriting- є терміном поєднаний з cognitive scientist Stevan Harnad describing combination of multiple email and topic threaded web archiv such as newsgroup, electronic mailing list, hypermail, netnews or Internet forum, linked and sortable by data, ... ... Wikipedia

    Collaborative decision-making software- Collaborative decision making (CDM) software є software application або module що coordinates the functions and features required to arrive at timely collective decision, enabling all relevant stakeholders to participate in the process. The… … Wikipedia

Нещодавно я спробував pthreads і був приємно здивований - це розширення, яке додає в PHP можливість працювати з декількома справжніми потоками. Жодної емуляції, ніякої магії, ніяких фейків - все по-справжньому.



Я розглядаю таке завдання. Є пул завдань, які треба якнайшвидше виконати. У PHP є й інші інструменти для вирішення цього завдання, тут вони не згадуються, стаття саме про pthreads.



Що таке pthreads

От і все! Ну, майже все. Насправді є те, що може засмутити допитливого читача. Все це не працює на стандартному PHP, скомпілюваному з опціями за замовчуванням. Щоб насолодитися багатопоточністю, треба, щоб у PHP був включений ZTS (Zend Thread Safety).

Налаштування PHP

Далі, PHP із ZTS. Не звертайте увагу на таку велику різницю в часі виконання в порівнянні з PHP без ZTS (37.65 проти 265.05 секунд), я не намагався привести до спільного знаменника налаштування PHP. У випадку без ZTS у мене включений XDebug наприклад.


Як видно, при використанні 2-х потоків швидкість виконання програми приблизно в 1,5 рази вище, ніж у випадку з лінійним кодом. При використанні 4-х потоків – у 3 рази.


Можна звернути увагу, що хоч процесор і 8-ядерний час виконання програми майже не змінювалося, якщо використовувалося більше 4 потоків. Схоже, це пов'язано з тим, що фізичні ядра у мого процесора 4. Для наочності зобразив табличку у вигляді діаграми.


Резюме

У PHP можлива елегантна робота з багатопоточністю з використанням розширення pthreads. Це дає відчутний приріст продуктивності.

Теги: Додати теги

Іноді виникає необхідність виконувати кілька дій одночасно, наприклад, перевіряти зміни в одній таблиці БД і вносити модифікації в іншу. Причому якщо одна з операцій (наприклад, перевірка змін) займає багато часу, очевидно, що послідовне виконання не забезпечить балансування ресурсів.

Для вирішення такого роду завдань у програмуванні використовується багатопоточність - кожна операція міститься в окремий потік з виділеним обсягом ресурсів і працює всередині нього. За такого підходу всі завдання будуть виконуватися окремо і незалежно.

Хоча PHP і не підтримує багатопоточність, є кілька методів її емуляції, про них і йтиметься нижче.

1. Запуск кількох копій скрипта - копії для операції

//woman.php if (!isset($_GET["thread"])) ( system("wget ​​http://localhost/woman.php?thread=make_me_happy"); system("wget ​​http://localhost/ woman.php?thread=make_me_rich"); ) elseif ($_GET["thread"] == "make_me_happy") ( make_her_happy(); ) elseif ($_GET["thread"] == "make_me_rich") ( find_another_one( );

Коли ми виконуємо цей скрипт без параметрів, він автоматично запускає дві копії себе з ідентифікаторами операцій ("thread=make_me_happy" та "thread=make_me_rich"), які ініціюють виконання необхідних функцій.

Таким чином ми досягаємо потрібного результату – дві операції виконуються одночасно – але це звичайно ж не багатопоточність, а просто милиця для виконання завдань одночасно.

2. Шлях джедаю - використання розширення PCNTL

PCNTL - розширення, що дозволяє повноцінно працювати з процесами. Крім управління, підтримує надсилання повідомлень, перевірку стану та встановлення пріоритетів. Ось так виглядає попередній скрипт із використанням PCNTL:

$pid = pcntl_fork(); if ($pid == 0) ( make_her_happy(); ) elseif ($pid > 0) ( $pid2 = pcntl_fork(); if ($pid2 == 0) ( find_another_one(); ) )

Виглядає досить заплутано, пройдемося рядково.

У першому рядку ми "форкаємо" поточний процес (форк - копіювання процесу зі збереженням значень всіх змінних), поділяючи на два процеси (поточний та дочірній) виконуються паралельно.

Щоб зрозуміти, де ми знаходимося в даний момент, у дочірньому чи материнському процесі, функція pcntl_fork повертає 0 для дочірнього та ідентифікатор процесу для материнського. Тому, в другому рядку, ми дивимося на $ pid, якщо він дорівнює нулю, значить ми в дочірньому процесі - виконуємо функцію, інакше ми знаходимося в материнському (рядок 4), тоді створюємо ще один процес і аналогічно виконуємо завдання.

Процес виконання скрипту:

Таким чином, скрипт створює ще 2 дочірні процеси, які є його копіями, містять ті ж змінні з аналогічними значеннями. А за допомогою ідентифікатора pcntl_fork, що повертається функцією, ми орієнтуємося в якому потоці знаходимося в даний момент і виконуємо необхідні дії.