PDA

View Full Version : سوال: یک سوال مهم



asonline
شنبه 18 مرداد 1393, 23:02 عصر
من یک برنامه نوشتم که با استفاده از تابع fopen تعداد 10 صفحه از سایت های دیگر رو باز می کنه و اطلاعات مورد نظر رو از اون ها دریافت میکنه و بعد از انجام تغییرات مورد نظر نمایش میده ولی به دلیل این که connect شدن به سرور چند سایت به طور همزمان یک کار زمانبره زمانی طول می کشه تا نتایج رو به کاربر نمایش بده می خواستم بدونم روشی با استفاده از توابع دیگر php یا استفاده از توابع ajax وجود داره که این کار رو سریع تر انجام بده؟ لطفا اگه هست راهنمایی کنید چون به کمکتون شدیدا نیاز دارم

abolfazl-z
یک شنبه 19 مرداد 1393, 19:37 عصر
توابع ajax سمت کلاینت هست که هیچ !

ولی دریافت اطلاعات از 10 سایت زمان بر هست این دیگه کلا بر میگردد به سرعت نت سرور ات

فکر کنم شما دارین روی سیستم خودتون تست انجام می دهید که در نتیجه سرعت پایین هست ولی ببرید روی سرور سرعت افزایش پیدا می کند.

درضمن بجای fopen از کتابخانه curl در PHP استفاده کنید که به مراتب سرعت و بهینه سازی بیشتری نسبت به دیگر توابع دارد.

eshpilen
یک شنبه 19 مرداد 1393, 19:41 عصر
fetch کردن رو بصورت ترتیبی انجام میدید، یعنی در هر زمان فقط یک عملیات/URL در جریان است، یا اینکه بصورت پردازش موازی کار میکنید؟

asonline
یک شنبه 19 مرداد 1393, 19:48 عصر
به صورت ترتیبی در یک صفحه به سایت های مختلف وصل می شوم

[younes]
یک شنبه 19 مرداد 1393, 19:48 عصر
دوستان پردازش موازی دز php یعنی چی ؟

همون مولتی ترد خودمونه در جاوا دیگه نه؟

eshpilen
یک شنبه 19 مرداد 1393, 20:13 عصر
تقریبا شبیه ترد.
پردازش موازی میتونه هم با ترد انجام بشه و هم بوسیلهء پراسسهای جداگانه. ترد یک جزیی از یک پراسس اصلی است و پراسس جدید و مستقلی در سیستم عامل نیست.
البته چون PHP ساپورت Native و راحت و همه جایی از مالتی ترد و این حرفا نداره، از روشهای غیرمستقیم و ترفندهای خاصی برای این امر (پردازش موازی) استفاده میشه. من یه موردش رو جایی دیدم که بنظرم خوب کار میکنه. البته اون ترد نیست و از پراسسهای مجزا استفاده میکنه. ترد در خیلی سناریوها مزیت داره چون به شکل راحت و استانداردی میشه کنترلش کرد، ولی پردازش موازی با استفاده از پراسسهای جداگانه هم خیلی جاها میشه بعنوان جایگزین استفاده بشه.

eshpilen
یک شنبه 19 مرداد 1393, 20:17 عصر
به صورت ترتیبی در یک صفحه به سایت های مختلف وصل می شوم
اگر موازی کنی و مثلا در هر زمان 5 درخواست رو اجرا کنی، سرعت میتونه چند برابر بالا بره.
البته برنامه نویسی پردازش موازی طبیعتا در اکثر موارد نسبت به حالت معمولی پیچیده تر و حجیم تر میشه (بخصوص که PHP ساپورت مستقیم و راحتی برای ترد و اینطور کارها نداره) و بسته به مورد ممکنه برنامه نویس واقعا مطلع و مسلط بخواد. اطلاع از وضعیت و کنترل پردازشهای موازی و تست و باگیابی اونا نسبت به برنامه نویسی غیرموازی میتونه کار واقعا چالش برانگیزی باشه.

asonline
یک شنبه 19 مرداد 1393, 21:47 عصر
اگر موازی کنی و مثلا در هر زمان 5 درخواست رو اجرا کنی، سرعت میتونه چند برابر بالا بره.
البته برنامه نویسی پردازش موازی طبیعتا در اکثر موارد نسبت به حالت معمولی پیچیده تر و حجیم تر میشه (بخصوص که PHP ساپورت مستقیم و راحتی برای ترد و اینطور کارها نداره) و بسته به مورد ممکنه برنامه نویس واقعا مطلع و مسلط بخواد. اطلاع از وضعیت و کنترل پردازشهای موازی و تست و باگیابی اونا نسبت به برنامه نویسی غیرموازی میتونه کار واقعا چالش برانگیزی باشه.

می خواستم بدونم این پردازش موازی با چه توابعی و چگونه انجام میشه؟ لطفا اگه میشه با مثال راهنماییم کنید با تشکر از توضیحات خوب شما

sibooy
سه شنبه 28 مرداد 1393, 21:57 عصر
می خواستم بدونم این پردازش موازی با چه توابعی و چگونه انجام میشه؟ لطفا اگه میشه با مثال راهنماییم کنید با تشکر از توضیحات خوب شما
سلام
من با php کار نکردم
اما یه توصیه می کنم سوالتون رو انگلیسی جستجو کنید. یا اگر می تونید توی فروم های انگلیسی زبان مطرح کنید خیلی صریح همراه با کد راهنمایی می کنن. یکی از این فروم ها stackoverflow هست.
من نمی دونم این بچه هایی که عضو فروم های ایرانی هستن چرا انقدر قطره چکانی جواب میدن و آدمو می پیچونن؟
این سوال

Parallel processing in PHP - How do you do it? (http://stackoverflow.com/questions/6107339/parallel-processing-in-php-how-do-you-do-it)


اینم یه پاسخ که توی همون فروم بود به نظرم به دردتون بخوره

exec doesn't parallelize. It waits for processing to finish before returning. curl can parallelize usingcurl_multi_init() (http://www.php.net/manual/en/function.curl-multi-init.php) and curl_multi_exec() (http://www.php.net/manual/en/function.curl-multi-exec.php). fork (http://www.php.net/manual/en/function.pcntl-fork.php) is pretty low level. I don't know gearman (http://www.php.net/manual/en/book.gearman.php), I've only read theBasic usage (http://www.php.net/manual/en/gearman.examples-reverse.php) example, so I cannot tell you anything about it.

اینم یه جواب دیگه

i use exec(). Its easy and clean. You basically need to build a thread manager, and thread scripts, that will do what you need.
I dont like fsockopen() because it will open a server connection, that will build up and may hit the apache's connection limit
I dont like curl functions for the same reason
I dont like pnctl because it needs the pnctl extension available, and you have to keep track of parent/child relations.
never played with gearman...

اینم لینکای بدربخور توی همین متنای انگلیسی:
http://php.net/manual/en/function.curl-multi-init.php
http://php.net/manual/en/function.curl-multi-exec.php
http://php.net/manual/en/function.pcntl-fork.php
http://php.net/manual/en/book.gearman.php
http://php.net/manual/en/gearman.examples-reverse.php

اینم لینکای استک آور فلو
http://stackoverflow.com/questions/15051739/parallelize-php-with-exec

http://stackoverflow.com/questions/6107339/parallel-processing-in-php-how-do-you-do-it

دوستان لطفا در دادن اطلاعات خسّت به خرج ندید. مردم لابد گرفتارن که میاد دست یاری دراز می کنن طرفتون.

موفق باشید