حسین‌نویس
حسین‌نویس
خواندن ۳ دقیقه·۳ ماه پیش

همزمانی در PHP: راهکارها و ابزارهای نوین

به عنوان کسی که به PHP علاقه‌مند است و نزدیک به ده سال با این زبان کار کرده، همیشه به زبان‌های دیگر که ابزارهای مناسبی برای همزمانی دارند، حسادت کرده‌ام. همزمانی یکی از جنبه‌های مهم در توسعه نرم‌افزارهای مدرن است که متاسفانه در PHP به خوبی پوشش داده نشده است. با این حال، در سال 2024، تغییرات مثبتی در این زمینه مشاهده می‌شود.


PHP با همکاری‌های جدید و ابزارهای تازه‌ای که به جامعه توسعه‌دهندگان اضافه شده، به زبان پایدارتری تبدیل شده است. بسیاری از شرکت‌ها، از جمله استارتاپ‌ها و شرکت‌های بزرگ، از PHP برای توسعه محصولات خود استفاده می‌کنند. برای استارتاپ‌ها، فریمورک‌های PHP همچنان بهترین گزینه برای شکل‌دهی به محصول به شمار می‌آیند.

ابزارهای جدید در دنیای PHP

دو ابزار که به نظر من ارزش بالایی به جامعه PHP اضافه کرده‌اند، عبارتند از:

  • Laravel Octane:

این ابزار به طور خاص برای بهبود عملکرد فریمورک Laravel طراحی شده و با ارائه قابلیت‌های بهبود یافته برای پردازش همزمان، تجربه توسعه‌دهندگان را بهبود می‌بخشد.

  • FrankenPHP:

این پروژه نیز با هدف ارتقاء قابلیت‌های همزمانی در PHP معرفی شده و ابزارهای متعددی را برای توسعه‌دهندگان فراهم می‌کند.

همزمانی چیست؟

در علوم کامپیوتر، همزمانی به توانایی اجرای بخش‌های مختلف یک برنامه به صورت همزمان یا بدون ترتیب خاص گفته می‌شود، بدون اینکه بر نتیجه نهایی تأثیر بگذارد. تصور کنید که با یک اسکریپت CLI کار می‌کنید که وظایف زمان‌بر را انجام می‌دهد و می‌توان این وظایف را به بخش‌های کوچکتر تقسیم کرد. این وظایف می‌تواند شامل درخواست‌های REST متعدد، ذخیره و بازیابی داده‌ها از پایگاه داده، یا تغییرات در سیستم فایل باشد.

به طور پیش‌فرض، PHP به صورت خط به خط اجرا می‌شود و تنها یک کار را در یک زمان انجام می‌دهد. ما نمی‌توانیم به صورت پیش‌فرض رشته‌های فرعی را به رشته‌های اصلی پیوست کنیم. با این حال، می‌توانیم از یک پکیج کوچک به نام spatie/fork استفاده کنیم تا به این قابلیت دست یابیم. این پکیج به ماژول‌های pcntl و sockets نیاز دارد، بنابراین مطمئن شوید که این ماژول‌ها در پروژه شما وجود دارند.

پیاده‌سازی همزمانی در PHP

فرض کنید که یک تابع زمان‌بر دارید که به نتیجه آن وابسته هستید و این تابع از 0 تا 100 میلیون شمارش می‌کند:

به طور معمول، شما این کد را به صورت زیر می‌نویسید:

این کد زمان زیادی می‌گیرد تا اجرا شود. حال بیایید زمان اجرای آن را بررسی کنیم:

در این حالت، اجرای این کد حدود ۴ ثانیه طول می‌کشد، که می‌تواند بر اساس قدرت محاسباتی و حافظه سیستم متفاوت باشد.

استفاده از Fork برای بهبود عملکرد

اکنون با استفاده از Spatie\Fork\Fork می‌توانیم کد را به صورت همزمان اجرا کنیم:

در این مثال، از \Spatie\Fork\Fork استفاده کردیم تا سه وظیفه مختلف ایجاد کرده و نتیجه هر یک را جمع‌آوری کنیم. نتیجه نشان می‌دهد که زمان اجرا از ۴.۳ ثانیه به ۱.۵ ثانیه کاهش یافته است، که نشان‌دهنده بهبود قابل توجهی در عملکرد است.

کجا باید برویم؟

توصیه می‌کنم صفحه GitHub پکیج spatie/fork را بررسی کنید. این صفحه دارای دستورالعمل‌های کاملی برای توسعه‌دهندگان است و یکی از بهترین پکیج‌های متن‌باز ساخته شده توسط Spatie محسوب می‌شود. همچنین، منابع و ویدئوهای آموزشی بسیاری در اینترنت وجود دارد که می‌تواند به شما در درک بهتر مفهوم همزمانی کمک کند.

این مقاله یک معرفی ساده به موضوع همزمانی در PHP بود. اگر به این مفهوم علاقه‌مند هستید، مطالعه بیشتر درباره این موضوع را توصیه می‌کنم.

روز خوبی داشته باشید!

همزمانی phpphpاموزش php
الکی برنامه نویس شدیم ...
شاید از این پست‌ها خوشتان بیاید