آنچه در این مقاله میخوانید
برنامهنویسی PHP با مدل Asynchronous (نامتقارن – غیرهمزمان)
۱۷ تیر ۱۳۹۹
در زبان PHP، بیشتر کدها بهصورت متقارن (Synchronous) اجرا میشوند، به این معنا که هر خط کد باید کامل اجرا شود تا نوبت به خط بعد برسد. این روش برای پروژههای ساده و صفحات وب ایستا مناسب است، اما وقتی با وظایف زمانبر یا همزمان مثل درخواستهای API، پردازش فایلهای بزرگ یا ارسال ایمیل انبوه روبهرو میشوید، مدل متقارن میتواند به گلوگاه عملکرد تبدیل شود.
در این شرایط، اجرای نامتقارن (Asynchronous) راهحل مناسبی برای ارتقاء سرعت، بهرهوری و تجربه کاربری در اپلیکیشنهای PHP بهشمار میرود. با بهرهگیری از ابزارهایی مانند کلاس Process
یا پکیجهایی نظیر spatie/async
، میتوانید تسکهای همزمان را بدون توقف جریان اصلی برنامه اجرا کنید.
در این مقاله با تفاوت اجرای متقارن و نامتقارن، مزایای هر مدل، ابزارهای پیادهسازی، مفاهیم Event Loop و Call Stack و کاربرد آنها در بهینهسازی اجرای همزمان در PHP آشنا خواهید شد.
در ادامه خواهید خواند:
- مدل متقارن در PHP چیست؟
- مدل نامتقارن (Asynchronous) و مزایای آن
- مقایسه Thread و Process
- Event Loop و Call Stack در برنامهنویسی نامتقارن
- پیادهسازی اجرای نامتقارن در PHP با Process
- جمع بندی
مدل متقارن در PHP چیست؟
در زبان PHP، اجرای دستورات بهصورت متقارن (Synchronous) یا بهاصطلاح خطی انجام میشود. به این معنا که هر خط کد باید کاملاً اجرا شود تا نوبت به خط بعدی برسد. برای مثال، اگر در کدی ابتدا یک فایل خوانده شود و سپس نتیجه آن در دیتابیس ذخیره شود، خط دوم (ذخیره در دیتابیس) تا پایان خواندن فایل منتظر میماند. این نوع اجرا ساده، قابل پیشبینی و برای بسیاری از پروژههای وب، وبسایتهای محتوایی یا فرمهای ساده، مناسب است.
با این حال، در پروژههایی که نیاز به انجام عملیات زمانبر یا پردازشهای سنگین دارند مانند ارتباط با APIهای خارجی، ارسال ایمیل انبوه، بارگذاری فایلهای بزرگ یا اجرای چند وظیفه بهطور همزمان مدل متقارن میتواند بهسرعت تبدیل به یک گلوگاه عملکردی شود. چون هر عملیات کند باعث میشود کل جریان اجرای برنامه متوقف شود.

مدل نامتقارن (Asynchronous) و مزایای آن
به همین دلیل، شناخت محدودیتهای مدل متقارن و بررسی راهکارهای جایگزین مانند مدل اجرای نامتقارن (Asynchronous) اهمیت زیادی برای توسعهدهندگان PHP دارد، زمانی که به دنبال افزایش سرعت، بهبود مقیاسپذیری و ارتقای تجربه کاربری هستند.
مدل برنامهنویسی نامتقارن یا Asynchronous به شما این امکان را میدهد که چندین عملیات را بهصورت همزمان و بدون انتظار برای پایان یافتن یکدیگر اجرا کنید. برخلاف مدل متقارن که هر دستور باید بهنوبت و پشتسرهم اجرا شود، در مدل نامتقارن میتوانید اجرای یک تسک را آغاز کرده و در عین حال، سایر وظایف را نیز بدون وقفه ادامه دهید.
برای درک بهتر این مفهوم، تصور کنید که یک ایمیل برای دوست خود ارسال میکنید. پس از ارسال، بلافاصله به سایر کارهای خود میپردازید، بدون اینکه منتظر پاسخ ایمیل بمانید. دقیقاً همین منطق در مدل Asynchronous نیز حاکم است.
در دنیای توسعه وب، این رویکرد میتواند تأثیر قابلتوجهی بر عملکرد اپلیکیشن، کاهش زمان پاسخدهی و افزایش رضایت کاربر داشته باشد. اجرای عملیات سنگین مانند درخواستهای API، ارسال ایمیلهای انبوه یا پردازش فایلهای حجیم، بدون اینکه جریان اصلی برنامه را متوقف کند، تنها با مدل نامتقارن امکانپذیر است.
بهکارگیری این مدل در اپلیکیشنهایی با بار بالا یا سیستمهای real-time مانند چت، نوتیفیکیشن، گزارشگیری لحظهای و صفهای پردازش، نقش کلیدی در مقیاسپذیری و پایداری نرمافزار ایفا میکند.
اگر بهدنبال محیطی حرفهای برای اجرای پروژههای PHP خود هستید، هاست PHP لیارا انتخابی هوشمندانه است. زیرساخت ابری این سرویس، اجرای روان و بدون وقفهی اپلیکیشنهای PHP را تضمین میکند.
✅ پشتیبانی کامل از Composer ✅ پیکربندی آسان و آماده برای فریمورکها✅ دیپلوی خودکار
خرید و راهاندازی سریع هاست PHP
مقایسه Thread و Process
برای پیادهسازی مدل نامتقارن در برنامهها، معمولاً از رشتهها (Threads) یا فرایندها (Processes) استفاده میشود.
- فرایند (Process): یک واحد مستقل از اجرا است که حافظه جداگانهای دارد. منابع پردازشی را بهصورت اختصاصی استفاده میکند و به همین دلیل از امنیت و پایداری بیشتری برخوردار است.
- رشته (Thread): زیرمجموعهای از یک فرایند است که منابع حافظه را با سایر رشتههای همان فرایند به اشتراک میگذارد. در نتیجه، اجرای آن سبکتر اما مدیریت آن پیچیدهتر است.
در گذشته، PHP از افزونهای به نام pthreads
برای اجرای چندرشتهای استفاده میکرد، اما این افزونه اکنون منسوخ شده و پیشنهاد نمیشود. جایگزینهای جدیدتری مانند افزونهی parallel
اکنون برای PHP در دسترس هستند.
Event Loop و Call Stack در برنامهنویسی نامتقارن
برای درک بهتر اجرای نامتقارن، باید با دو مفهوم کلیدی آشنا شد.
- Call Stack (پشته فراخوانی): جایی است که تابعها در ترتیب اجرا قرار میگیرند. تا زمانی که توابع موجود در پشته اجرا نشدهاند، توابع جدید وارد آن نمیشوند.
- Event Loop (حلقه رویداد): سازوکاری است که وظایف آماده اجرا را بررسی میکند و زمانی که پشته خالی شد، آنها را اجرا مینماید.
زبانهایی مانند Node.js بهصورت ذاتی از Event Loop پشتیبانی میکنند؛ در حالی که در PHP برای دستیابی به این مدل، باید از ابزارهای جانبی استفاده کرد.
معرفی هاست رایگان PHP
هاست رایگان PHP
پیادهسازی اجرای نامتقارن در PHP با Process
در PHP میتوان با استفاده از کلاس Symfony\Component\Process\Process
چند فرایند را بهصورت جداگانه اجرا کرد.
use Symfony\Component\Process\Process;
$process = new Process(['php', 'artisan', 'task:run']);
$process2 = new Process(['php', 'artisan', 'anothertask:run']);
$process->start();
$process2->start();
// انجام برخی کارها
// سپس منتظر میمانیم فرآیند فرعی تمام شود
while ($process->isRunning() || $process2->isRunning()){
sleep(1);
}
// در پایان پاسخ را برگشت میدهیم
return response();
در این مثال، دو وظیفه جداگانه بهصورت همزمان آغاز شدهاند. در حالی که این فرایندها در حال اجرا هستند، برنامه اصلی میتواند به کار خود ادامه دهد. در نهایت، پس از اتمام آنها، پاسخ نهایی برگردانده میشود.
نحوه نصب و ایمن سازی phpMyAdmin در سرور مجازی اوبونتو Ubuntu
نصب phpMyAdmin در سرور مجازی اوبونتو
جمع بندی
مدل اجرای متقارن در PHP ساده، قابل درک و مناسب برای پروژههای کوچک است؛ اما در برنامههایی که نیاز به سرعت، مقیاسپذیری و مدیریت وظایف همزمان وجود دارد، استفاده از رویکرد asynchronous به یک ضرورت تبدیل میشود.
با بهرهگیری از کلاس Process
، پکیجهایی مثل spatie/async
، و مفاهیمی مانند Event Loop، میتوانید اجرای چندین عملیات بهصورت همزمان را بدون توقف اپلیکیشن ممکن کنید. این کار نهتنها باعث افزایش سرعت و کاهش تأخیر در پاسخگویی میشود، بلکه زیرساختی مقیاسپذیر و قابل اعتماد برای برنامههای real-time فراهم میکند.
در دنیایی که تجربه کاربری سریع و بدون تاخیر مزیت رقابتی محسوب میشود، پیادهسازی اجرای نامتقارن در PHP میتواند گامی مؤثر برای بهبود عملکرد و موفقیت فنی پروژههای شما باشد.
فرایند اصلی برنامه شما، فرایندهای فرعی متعددی را شروع میکند و برروی اجرای آنها درحالی که به کار خود ادامه میدهند نظارت دارد. برای مدیریت ارتباط بین فرآیند والد و فرزند از سیگنالهای PHP’s async استفاده میکند. برای اطلاع بیشتر از نحوه کار این بسته، مقاله آقای Brent Roose را مشاهده بفرمایید.
منبع: https://divinglaravel.com/authentication-and-laravel-airlock