<?xml version="1.0" encoding="windows-1251"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Comments on: Многопоточность в PHP</title>
	<atom:link href="http://www.seoblog.com.ua/2007/03/20/multiplexing-in-php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.seoblog.com.ua/2007/03/20/multiplexing-in-php/</link>
	<description>Твои первые шаги в мире оптимизации, маркетинга и блоговедения</description>
	<pubDate>Wed, 07 Jan 2009 03:33:31 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.5</generator>
		<item>
		<title>By: VolCh</title>
		<link>http://www.seoblog.com.ua/2007/03/20/multiplexing-in-php/#comment-18868</link>
		<dc:creator>VolCh</dc:creator>
		<pubDate>Wed, 16 Jul 2008 14:50:19 +0000</pubDate>
		<guid isPermaLink="false">http://www.seoblog.com.ua/2007/03/02/multiplexing-in-php/#comment-18868</guid>
		<description>Как раз наоборот там написано
&lt;blockquote&gt; Using a timeout value of 0 allows you to instantaneously poll the status of the streams, however, it is NOT a good idea to use a 0 timeout value in a loop as it will cause your script to consume too much CPU time.

It is much better to specify a timeout value of a few seconds, although if you need to be checking and running other code concurrently, using a timeout value of at least 200000 microseconds will help reduce the CPU usage of your script.

Remember that the timeout value is the maximum time that will elapse; stream_select() will return as soon as the requested streams are ready for use. &lt;/blockquote&gt;

А на практике (особенно при работе в сотни потоков и большой нагрузке по парсингу, например регулярками сложными) вообще часто рекомендуют ставить таймаут 0, а в цикле вызывать sleep() или usleep(), поскольку если данные готовятся быстрее, чем обрабатываются, то любой таймаут эквивалентен 0, ведь к моменту вызова уже есть хотя бы один сокет готовый в работе и возврат происходит сразу же. А sleep гарантирует, что часть ресурсов процессора будет отдана и другим процессам. На десктопе подбираю время задержки так, чтобы загрузка процессора была под 80% (если один основной фоновый процесс нужный) - 20% браузеру, редакторам и прочему "офисному" вполне хватает

Как отправную я и использовал, просто удивился, что с копи-паста не заработало :)</description>
		<content:encoded><![CDATA[<p>Как раз наоборот там написано</p>
<blockquote><p> Using a timeout value of 0 allows you to instantaneously poll the status of the streams, however, it is NOT a good idea to use a 0 timeout value in a loop as it will cause your script to consume too much CPU time.</p>
<p>It is much better to specify a timeout value of a few seconds, although if you need to be checking and running other code concurrently, using a timeout value of at least 200000 microseconds will help reduce the CPU usage of your script.</p>
<p>Remember that the timeout value is the maximum time that will elapse; stream_select() will return as soon as the requested streams are ready for use. </p></blockquote>
<p>А на практике (особенно при работе в сотни потоков и большой нагрузке по парсингу, например регулярками сложными) вообще часто рекомендуют ставить таймаут 0, а в цикле вызывать sleep() или usleep(), поскольку если данные готовятся быстрее, чем обрабатываются, то любой таймаут эквивалентен 0, ведь к моменту вызова уже есть хотя бы один сокет готовый в работе и возврат происходит сразу же. А sleep гарантирует, что часть ресурсов процессора будет отдана и другим процессам. На десктопе подбираю время задержки так, чтобы загрузка процессора была под 80% (если один основной фоновый процесс нужный) - 20% браузеру, редакторам и прочему &#8220;офисному&#8221; вполне хватает</p>
<p>Как отправную я и использовал, просто удивился, что с копи-паста не заработало <img src='http://www.seoblog.com.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bambino</title>
		<link>http://www.seoblog.com.ua/2007/03/20/multiplexing-in-php/#comment-18867</link>
		<dc:creator>Bambino</dc:creator>
		<pubDate>Wed, 16 Jul 2008 09:11:01 +0000</pubDate>
		<guid isPermaLink="false">http://www.seoblog.com.ua/2007/03/02/multiplexing-in-php/#comment-18867</guid>
		<description>Если почитать документацию по stream_select/socket_select, то насколько я помню, таймаут нужно выставлять в 0, иначе так можно подвесить систему. Данную статью можно использовать как отправную точку, хотя думаю, что должно работать. Так как я свой пример лабал на 4-м ПХП, то с socket_select все работает.</description>
		<content:encoded><![CDATA[<p>Если почитать документацию по stream_select/socket_select, то насколько я помню, таймаут нужно выставлять в 0, иначе так можно подвесить систему. Данную статью можно использовать как отправную точку, хотя думаю, что должно работать. Так как я свой пример лабал на 4-м ПХП, то с socket_select все работает.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: VolCh</title>
		<link>http://www.seoblog.com.ua/2007/03/20/multiplexing-in-php/#comment-18866</link>
		<dc:creator>VolCh</dc:creator>
		<pubDate>Wed, 16 Jul 2008 07:43:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.seoblog.com.ua/2007/03/02/multiplexing-in-php/#comment-18866</guid>
		<description>Чего-то не хочет работать код :( 
stream_select возвращает всегда ноль (не false), причем без таймаута, хотя в массивы прописывает сокеты, пришлось использовать count($read)+count($write) в условии

PHP Version =&#62; 5.2.4-2ubuntu5.2</description>
		<content:encoded><![CDATA[<p>Чего-то не хочет работать код <img src='http://www.seoblog.com.ua/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /><br />
stream_select возвращает всегда ноль (не false), причем без таймаута, хотя в массивы прописывает сокеты, пришлось использовать count($read)+count($write) в условии</p>
<p>PHP Version =&gt; 5.2.4-2ubuntu5.2</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: VolCh</title>
		<link>http://www.seoblog.com.ua/2007/03/20/multiplexing-in-php/#comment-18862</link>
		<dc:creator>VolCh</dc:creator>
		<pubDate>Tue, 15 Jul 2008 23:22:17 +0000</pubDate>
		<guid isPermaLink="false">http://www.seoblog.com.ua/2007/03/02/multiplexing-in-php/#comment-18862</guid>
		<description>Вот спасибо, пошел затачивать напильником под свои нужды, думал завтра опять весь день придется ковыряться с socket_select (что-то я никак не мог EOF поймать, только по таймауту отваливались, оказывается просто - сокет готов к чтению, а данных нет :) ), чтобы с pcntl не заморачиваться, да и не далеко везде он есть

2 Alexk: У твоего варианта один очень большой недостаток - ему слишком много нужно для работы, кроме собственно PHP (про ОС и коннект не вспоминаем :) )::
- веб-сервер
- браузер
- JS в браузере
Этот же скрипт можно запустить прямо из командной строки, даже в DOS'е (вроде бы :) )</description>
		<content:encoded><![CDATA[<p>Вот спасибо, пошел затачивать напильником под свои нужды, думал завтра опять весь день придется ковыряться с socket_select (что-то я никак не мог EOF поймать, только по таймауту отваливались, оказывается просто - сокет готов к чтению, а данных нет <img src='http://www.seoblog.com.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ), чтобы с pcntl не заморачиваться, да и не далеко везде он есть</p>
<p>2 Alexk: У твоего варианта один очень большой недостаток - ему слишком много нужно для работы, кроме собственно PHP (про ОС и коннект не вспоминаем <img src='http://www.seoblog.com.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )::<br />
- веб-сервер<br />
- браузер<br />
- JS в браузере<br />
Этот же скрипт можно запустить прямо из командной строки, даже в DOS&#8217;е (вроде бы <img src='http://www.seoblog.com.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bambino</title>
		<link>http://www.seoblog.com.ua/2007/03/20/multiplexing-in-php/#comment-18810</link>
		<dc:creator>Bambino</dc:creator>
		<pubDate>Sat, 05 Jul 2008 21:42:45 +0000</pubDate>
		<guid isPermaLink="false">http://www.seoblog.com.ua/2007/03/02/multiplexing-in-php/#comment-18810</guid>
		<description>Ну только не нужно говорить таких громких слов. :) Ты пишешь, что многопоточности в PHP нет, но твой пост содержит в себе это выражение - ты противоречишь сам себе :)... И еще раз повторюсь многопоточность в PHP &lt;strong&gt;никак не может быть выполнена через ajax&lt;/strong&gt;. Согласен? PHP - это серверный язык (ты это понимаешь), а ajax - это технология &lt;strong&gt;никак с PHP не связана&lt;/strong&gt;. 
Возможно слово &lt;strong&gt;multiplexing&lt;/strong&gt; и не переводится как многопоточность, но в применении к тесту этого поста (ты же его внимательно читал?), этот термин можно применить. Здесь под многопоточностью понимается &lt;strong&gt;асинхронная работа с несколькими неблокирующими сокетами&lt;/strong&gt;. И &lt;a href="http://php.net/socket_select" target="_blank" rel="nofollow"&gt;socket_select&lt;/a&gt; отлично справляется со своей работой! И не нужно так категорично заявлять. Как говорят, вы просто не умеете их готовить. ;) Я сам лично создал скрипт, который обращался к нескольким серверам одновременно и все отлично работало. То, что сделал ты, другие люди делают с помощью fork'ов и согласись, что этот метод даже более действенен, чем твой. Кстати, PHPшный socket_select - это не более, чем обертка юниксовой функции select. Это не какой-то там AJAX, который тупо перестанет работать, когда пользователь запретить выполнение JavaScript. :P Понимаешь, можно и из пушки по воробьям стрелять. Каждый должен выполнять свои функции. PHP работать с сокетами, AJAX работать с содержанием страницы. Кстати функция file_get_contents блокирующая, а это потенциальная проблема, т.е. потенциально ты можешь повесить все свои AJAX-"потоки". А мы люди серьезные, не выдумываем странные идеи, а работаем с неблокирующими сокетами, для чего имеются все необходимые функции. ;) Функция socket_get_option сообщит тебе о статусе сокета и в socket_select попадут только рабочие сокеты! Никаких блокировок!

P.S. PHP-шный парсер можно закинуть на отдельный сервер, запустить как процесс или несколько процессов(именно процессов!), можно заставить работать через прокси (любые). А что можно сделать с твоим? Разве, что для твоих нужд. Нет - это не наш метод. Телефон должен звонить, фотоаппарат фотографировать. Согласись, что фотокамеры в мобильниках отстой... ;)</description>
		<content:encoded><![CDATA[<p>Ну только не нужно говорить таких громких слов. <img src='http://www.seoblog.com.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Ты пишешь, что многопоточности в PHP нет, но твой пост содержит в себе это выражение - ты противоречишь сам себе :)&#8230; И еще раз повторюсь многопоточность в PHP <strong>никак не может быть выполнена через ajax</strong>. Согласен? PHP - это серверный язык (ты это понимаешь), а ajax - это технология <strong>никак с PHP не связана</strong>.<br />
Возможно слово <strong>multiplexing</strong> и не переводится как многопоточность, но в применении к тесту этого поста (ты же его внимательно читал?), этот термин можно применить. Здесь под многопоточностью понимается <strong>асинхронная работа с несколькими неблокирующими сокетами</strong>. И <a target="_blank" href="http://www.seoblog.com.ua/ext/aHR0cDovL3BocC5uZXQvc29ja2V0X3NlbGVjdA==/"  rel="nofollow">socket_select</a> отлично справляется со своей работой! И не нужно так категорично заявлять. Как говорят, вы просто не умеете их готовить. <img src='http://www.seoblog.com.ua/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> Я сам лично создал скрипт, который обращался к нескольким серверам одновременно и все отлично работало. То, что сделал ты, другие люди делают с помощью fork&#8217;ов и согласись, что этот метод даже более действенен, чем твой. Кстати, PHPшный socket_select - это не более, чем обертка юниксовой функции select. Это не какой-то там AJAX, который тупо перестанет работать, когда пользователь запретить выполнение JavaScript. <img src='http://www.seoblog.com.ua/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> Понимаешь, можно и из пушки по воробьям стрелять. Каждый должен выполнять свои функции. PHP работать с сокетами, AJAX работать с содержанием страницы. Кстати функция file_get_contents блокирующая, а это потенциальная проблема, т.е. потенциально ты можешь повесить все свои AJAX-&#8221;потоки&#8221;. А мы люди серьезные, не выдумываем странные идеи, а работаем с неблокирующими сокетами, для чего имеются все необходимые функции. <img src='http://www.seoblog.com.ua/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> Функция socket_get_option сообщит тебе о статусе сокета и в socket_select попадут только рабочие сокеты! Никаких блокировок!</p>
<p>P.S. PHP-шный парсер можно закинуть на отдельный сервер, запустить как процесс или несколько процессов(именно процессов!), можно заставить работать через прокси (любые). А что можно сделать с твоим? Разве, что для твоих нужд. Нет - это не наш метод. Телефон должен звонить, фотоаппарат фотографировать. Согласись, что фотокамеры в мобильниках отстой&#8230; <img src='http://www.seoblog.com.ua/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alexk</title>
		<link>http://www.seoblog.com.ua/2007/03/20/multiplexing-in-php/#comment-18808</link>
		<dc:creator>Alexk</dc:creator>
		<pubDate>Sat, 05 Jul 2008 14:49:26 +0000</pubDate>
		<guid isPermaLink="false">http://www.seoblog.com.ua/2007/03/02/multiplexing-in-php/#comment-18808</guid>
		<description>Пойми, многопоточности в PHP нет!!! А та, что "есть" именно ведёт к проблеме дохлых сокетов. Если ты внимательно читал мой пост в блоге, то должен был понять, что каждый ответ от скрипта-парсера обрабатывается отдельно, а не пачкой, как например в curl.

Насчёт применения AJAX - это выход, который я нашёл и пока доволен им на все 100%</description>
		<content:encoded><![CDATA[<p>Пойми, многопоточности в PHP нет!!! А та, что &#8220;есть&#8221; именно ведёт к проблеме дохлых сокетов. Если ты внимательно читал мой пост в блоге, то должен был понять, что каждый ответ от скрипта-парсера обрабатывается отдельно, а не пачкой, как например в curl.</p>
<p>Насчёт применения AJAX - это выход, который я нашёл и пока доволен им на все 100%</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bambino</title>
		<link>http://www.seoblog.com.ua/2007/03/20/multiplexing-in-php/#comment-18806</link>
		<dc:creator>Bambino</dc:creator>
		<pubDate>Sat, 05 Jul 2008 13:29:27 +0000</pubDate>
		<guid isPermaLink="false">http://www.seoblog.com.ua/2007/03/02/multiplexing-in-php/#comment-18806</guid>
		<description>А что, ajax не подвержен воздействию медленных и дохлых страниц? :) Или соединения осуществляются без использования сокетов? И вообще, при чем тут ajax?!! Речь идет о &lt;strong&gt;многопоточности в PHP&lt;/strong&gt;!!
Да и название твоего поста "Многопоточность в PHP через AJAX" наводит на мысль о том, что кто-то не до конца понимает, что такое PHP, а что такое AJAX :) Многопоточности в PHP через AJAX просто не может быть лишь потому, что &lt;a href="http://ru.wikipedia.org/wiki/AJAX" target="_blank" rel="nofollow"&gt;AJAX&lt;/a&gt; - это не часть PHP и даже не его надстройка. Это технология, которая реализуется с помощью серверного скриптового языка, например, того же PHP.</description>
		<content:encoded><![CDATA[<p>А что, ajax не подвержен воздействию медленных и дохлых страниц? <img src='http://www.seoblog.com.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Или соединения осуществляются без использования сокетов? И вообще, при чем тут ajax?!! Речь идет о <strong>многопоточности в PHP</strong>!!<br />
Да и название твоего поста &#8220;Многопоточность в PHP через AJAX&#8221; наводит на мысль о том, что кто-то не до конца понимает, что такое PHP, а что такое AJAX <img src='http://www.seoblog.com.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Многопоточности в PHP через AJAX просто не может быть лишь потому, что <a target="_blank" href="http://www.seoblog.com.ua/ext/aHR0cDovL3J1Lndpa2lwZWRpYS5vcmcvd2lraS9BSkFY/"  rel="nofollow">AJAX</a> - это не часть PHP и даже не его надстройка. Это технология, которая реализуется с помощью серверного скриптового языка, например, того же PHP.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alexk</title>
		<link>http://www.seoblog.com.ua/2007/03/20/multiplexing-in-php/#comment-18798</link>
		<dc:creator>Alexk</dc:creator>
		<pubDate>Sat, 05 Jul 2008 01:04:59 +0000</pubDate>
		<guid isPermaLink="false">http://www.seoblog.com.ua/2007/03/02/multiplexing-in-php/#comment-18798</guid>
		<description>используя данный код можно нарваться на медленные или дохлые страницы и тогда весь процесс зависнет и вылетит по таймауту, что не желательно. Я использовал AJAX и асинхронные запросы - описание в моём блоге</description>
		<content:encoded><![CDATA[<p>используя данный код можно нарваться на медленные или дохлые страницы и тогда весь процесс зависнет и вылетит по таймауту, что не желательно. Я использовал AJAX и асинхронные запросы - описание в моём блоге</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bambino</title>
		<link>http://www.seoblog.com.ua/2007/03/20/multiplexing-in-php/#comment-17217</link>
		<dc:creator>Bambino</dc:creator>
		<pubDate>Fri, 16 May 2008 22:26:39 +0000</pubDate>
		<guid isPermaLink="false">http://www.seoblog.com.ua/2007/03/02/multiplexing-in-php/#comment-17217</guid>
		<description>Spammers go home! :)</description>
		<content:encoded><![CDATA[<p>Spammers go home! <img src='http://www.seoblog.com.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Organic Baby Bedding</title>
		<link>http://www.seoblog.com.ua/2007/03/20/multiplexing-in-php/#comment-17213</link>
		<dc:creator>Organic Baby Bedding</dc:creator>
		<pubDate>Fri, 16 May 2008 18:55:38 +0000</pubDate>
		<guid isPermaLink="false">http://www.seoblog.com.ua/2007/03/02/multiplexing-in-php/#comment-17213</guid>
		<description>&lt;strong&gt;Organic Baby Bedding...&lt;/strong&gt;

I found your site on technorati and read a few of your other posts. Keep up the good work. I just added your RSS feed to my Google News Reader. Looking forward to reading more from you....</description>
		<content:encoded><![CDATA[<p><strong>Organic Baby Bedding&#8230;</strong></p>
<p>I found your site on technorati and read a few of your other posts. Keep up the good work. I just added your RSS feed to my Google News Reader. Looking forward to reading more from you&#8230;.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
