PDA

View Full Version : حرفه ای: پردازش موازی چیست؟ و توابع این کار در php چیست؟



asonline
دوشنبه 20 مرداد 1393, 17:10 عصر
پردازش موازی چیست؟ و توابع این کار در php چیست؟ لطفا با مثال توضیح دهید

eshpilen
دوشنبه 20 مرداد 1393, 17:40 عصر
این بهترین روشیه که من تاحالا دیدم: http://phplens.com/phpeverywhere/?q=node/view/254

eshpilen
دوشنبه 20 مرداد 1393, 18:55 عصر
اتفاقا امروز خودم میخواستم یه تاپیک درمورد پردازش موازی بزنم و این مورد رو ذکر کنم و شرح بدم، ولی متاسفانه وقت نشد و سر کار دائم مشغولیت داشتم. تازه الانم باز از سر کار جواب شما رو دادم.
خب شما پیشدستی کردی و این تاپیک رو زدی که البته کار درستی بود.
راستی امیدوارم خودت با دیدن مطالب صفحه و کدهاش متوجه قضیه و طرز کار و استفاده ازش شده باشی و نیازی به توضیح و کمک بیشتری نباشه. اگر نفهمیدی بگو، سر فرصت تونستم جواب میدم.

این ترفندی که طرف زده واقعا خلاقانه و بهترین ترفند این کاره که تاحالا دیدم.
یه خوبیش اینه نیاز به نصب و فعال بودن هیچ چیزی غیر از همون نصب های استاندارد PHP که روی تمام هاستهای اشتراکی هم وجود داره نداره.
روش استفاده ازش هم خیلی ساده است. با تابع JobStartAsync اسکریپت مورد نظر رو اجرا میکنی که بصورت موازی شروع به اجرا میکنه.
ضمنا خروجی/وضعیت هر پراسس موازی رو هم شما میتونی براحتی با تابع JobPollAsync دریافت کنی.

asonline
سه شنبه 21 مرداد 1393, 12:11 عصر
نظرتون راجع به این اسکریپت چیه؟
https://github.com/petewarden/ParallelCurl

tehro0n
یک شنبه 21 دی 1393, 20:11 عصر
اگه میشه کمی توضیح دهید، من این مورد رو کار نکردم و میبینم که تو این کد پورت و آدرس URL می خواد، آیا به همین صورت حتما باید باشه و ورودی ها به همین شکل هستن یا میشه تغییرش داد

در واقع من می خوام برای ارسال SMS از این روش استفاده کنم، و آرایه های 80 شماره ای رو به تابع ارسال دائما بفرستم که پشتیبانی مگفا گفتن از روش ارسال با پردازش موازی حتما باید انجام بدم، و برای ارسال 80000 حلقه 1000 تایی نذارم..

ممنون اگه با چنین مثالی توضیح دهید

us1234
یک شنبه 21 دی 1393, 20:47 عصر
اگه میشه کمی توضیح دهید، من این مورد رو کار نکردم و میبینم که تو این کد پورت و آدرس URL می خواد، آیا به همین صورت حتما باید باشه و ورودی ها به همین شکل هستن یا میشه تغییرش داد

در واقع من می خوام برای ارسال SMS از این روش استفاده کنم، و آرایه های 80 شماره ای رو به تابع ارسال دائما بفرستم که پشتیبانی مگفا گفتن از روش ارسال با پردازش موازی حتما باید انجام بدم، و برای ارسال 80000 حلقه 1000 تایی نذارم..

ممنون اگه با چنین مثالی توضیح دهید

شما اگر با دیتابیس کار میکنید نیاز به درگیر شدن به این چنین توابع نیست . ذات php بر چند نخی بودن استواره و اگر نبود اصلا نمیتوانست چندین کاربر همزمان سرویس بدهد.
برای عملیات ساده وقتی دیتابیسی دارید که نتایج در آن ذخیره میشود فقط کافی است یک لینک را در چند مرورگر همزمان باز کنید . این کار مثل این است که چند پروسه همزمان اجرا شده است .
فقط باید با دیتابیس مدیریت کنید که چی باید اجرا شود و چه عملیاتی باید انجام شود .

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

tehro0n
دوشنبه 22 دی 1393, 14:43 عصر
شما دقت به کارم نکردید، فرض بگیرید من پیامکی برای 80000 شماره تلفن قراره بفرستم، شرکتی که به من این سرویس ارسال رو میده میگه شماره ها را با آرایه های 80 تایی بفرستم که میشه یک لوپ 1000 تایی
حالا هر کدام از ارسال های 80 تایی هم 2 ثانیه طول میکشه و من قرار نیست 2000 ثانیه بعد پیامکی رو ارسال کنم، همچنین پشتیبانی اون شرکت هم گفت به هیچ عنوان این کارو نکنم چون آخراش اررور میده، و باید به صورت موازی مثلا 100 پردازش 80 آرایه ای اجرا کنم که تو لوپ 10 تایی ریخته باشم
متوجه شدید کجا به مشکل می خورم؟

us1234
دوشنبه 22 دی 1393, 17:48 عصر
شما دقت به کارم نکردید، فرض بگیرید من پیامکی برای 80000 شماره تلفن قراره بفرستم، شرکتی که به من این سرویس ارسال رو میده میگه شماره ها را با آرایه های 80 تایی بفرستم که میشه یک لوپ 1000 تایی
حالا هر کدام از ارسال های 80 تایی هم 2 ثانیه طول میکشه و من قرار نیست 2000 ثانیه بعد پیامکی رو ارسال کنم، همچنین پشتیبانی اون شرکت هم گفت به هیچ عنوان این کارو نکنم چون آخراش اررور میده، و باید به صورت موازی مثلا 100 پردازش 80 آرایه ای اجرا کنم که تو لوپ 10 تایی ریخته باشم
متوجه شدید کجا به مشکل می خورم؟

شما 80000 پیامک را در لحظه ورود به پنلتان یکجا در دیتابیس ذخیره کنید .
بعد 100 تا کرون که هر دقیقه اجرا میشود تنظیم کنید که پیامک های داخل دیتابیس را بخواند و یک فیلد 0 را 1 کند ( به معنی دیده شده ) و پیام ها را در آرایه های 80 تایی پوش کنه و بفرسته به گیت وی .
هر کرون یک لوپ 10 تایی دارد . یعنی هر کرون 10 بار اقدام به ارسال آرایه ها می کند .

در یک دقیقه کل پیامک ها ارسال میشود .
دقیقا کجا به مشکل می خوردید ؟

tehro0n
دوشنبه 22 دی 1393, 21:06 عصر
من این شماره هارو تو دیتابیسم دارم، منتها یکبار 40000 تا میفرسته و نیم ساعت بعد 80000 تا یا 10000 تا و ثابت نیست
بیشتر هدفم این بود که با توجه به تعداد رکوردهای خروجی بیام و پردازش موازی انجام بدم و کم و زیاد بشه

us1234
سه شنبه 23 دی 1393, 10:55 صبح
من این شماره هارو تو دیتابیسم دارم، منتها یکبار 40000 تا میفرسته و نیم ساعت بعد 80000 تا یا 10000 تا و ثابت نیست
بیشتر هدفم این بود که با توجه به تعداد رکوردهای خروجی بیام و پردازش موازی انجام بدم و کم و زیاد بشه

مهم نیست تعداد چندتا باشه .

شما باید یک تیبل برای پیامک های درحال ارسال اختصاص دهید .
در این تیبل همیشه بررسی می کنید که اگر تعداد ارسال نشده ها بیشتر از 80 تا بود ( سایز آرایه ) 80 تا رکورد آخری ( صف ) که هنوز ارسال نشده را در یک آرایه بریزد و ارسال کند . اگر تعداد کمتر از 80 بود تمامی رکورد ها را در یک آرایه بریزد و ارسال کند.
این عملیات را با روش کرون به تعداد زیاد اجرا کنید که خودش میشه پردازش موازی ...