به عنوان کسی که به PHP علاقهمند است و نزدیک به ده سال با این زبان کار کرده، همیشه به زبانهای دیگر که ابزارهای مناسبی برای همزمانی دارند، حسادت کردهام. همزمانی یکی از جنبههای مهم در توسعه نرمافزارهای مدرن است که متاسفانه در PHP به خوبی پوشش داده نشده است. با این حال، در سال 2024، تغییرات مثبتی در این زمینه مشاهده میشود.
PHP با همکاریهای جدید و ابزارهای تازهای که به جامعه توسعهدهندگان اضافه شده، به زبان پایدارتری تبدیل شده است. بسیاری از شرکتها، از جمله استارتاپها و شرکتهای بزرگ، از PHP برای توسعه محصولات خود استفاده میکنند. برای استارتاپها، فریمورکهای PHP همچنان بهترین گزینه برای شکلدهی به محصول به شمار میآیند.
دو ابزار که به نظر من ارزش بالایی به جامعه PHP اضافه کردهاند، عبارتند از:
این ابزار به طور خاص برای بهبود عملکرد فریمورک Laravel طراحی شده و با ارائه قابلیتهای بهبود یافته برای پردازش همزمان، تجربه توسعهدهندگان را بهبود میبخشد.
این پروژه نیز با هدف ارتقاء قابلیتهای همزمانی در PHP معرفی شده و ابزارهای متعددی را برای توسعهدهندگان فراهم میکند.
در علوم کامپیوتر، همزمانی به توانایی اجرای بخشهای مختلف یک برنامه به صورت همزمان یا بدون ترتیب خاص گفته میشود، بدون اینکه بر نتیجه نهایی تأثیر بگذارد. تصور کنید که با یک اسکریپت CLI کار میکنید که وظایف زمانبر را انجام میدهد و میتوان این وظایف را به بخشهای کوچکتر تقسیم کرد. این وظایف میتواند شامل درخواستهای REST متعدد، ذخیره و بازیابی دادهها از پایگاه داده، یا تغییرات در سیستم فایل باشد.
به طور پیشفرض، PHP به صورت خط به خط اجرا میشود و تنها یک کار را در یک زمان انجام میدهد. ما نمیتوانیم به صورت پیشفرض رشتههای فرعی را به رشتههای اصلی پیوست کنیم. با این حال، میتوانیم از یک پکیج کوچک به نام spatie/fork
استفاده کنیم تا به این قابلیت دست یابیم. این پکیج به ماژولهای pcntl
و sockets
نیاز دارد، بنابراین مطمئن شوید که این ماژولها در پروژه شما وجود دارند.
فرض کنید که یک تابع زمانبر دارید که به نتیجه آن وابسته هستید و این تابع از 0 تا 100 میلیون شمارش میکند:
به طور معمول، شما این کد را به صورت زیر مینویسید:
این کد زمان زیادی میگیرد تا اجرا شود. حال بیایید زمان اجرای آن را بررسی کنیم:
در این حالت، اجرای این کد حدود ۴ ثانیه طول میکشد، که میتواند بر اساس قدرت محاسباتی و حافظه سیستم متفاوت باشد.
اکنون با استفاده از Spatie\Fork\Fork
میتوانیم کد را به صورت همزمان اجرا کنیم:
در این مثال، از \Spatie\Fork\Fork
استفاده کردیم تا سه وظیفه مختلف ایجاد کرده و نتیجه هر یک را جمعآوری کنیم. نتیجه نشان میدهد که زمان اجرا از ۴.۳ ثانیه به ۱.۵ ثانیه کاهش یافته است، که نشاندهنده بهبود قابل توجهی در عملکرد است.
توصیه میکنم صفحه GitHub پکیج spatie/fork
را بررسی کنید. این صفحه دارای دستورالعملهای کاملی برای توسعهدهندگان است و یکی از بهترین پکیجهای متنباز ساخته شده توسط Spatie محسوب میشود. همچنین، منابع و ویدئوهای آموزشی بسیاری در اینترنت وجود دارد که میتواند به شما در درک بهتر مفهوم همزمانی کمک کند.
این مقاله یک معرفی ساده به موضوع همزمانی در PHP بود. اگر به این مفهوم علاقهمند هستید، مطالعه بیشتر درباره این موضوع را توصیه میکنم.
روز خوبی داشته باشید!