PHP में Thread Safe और Non-Thread Safe क्या है? आसान भाषा में समझें
\n\nअगर आपने कभी Windows पर PHP इंस्टॉल किया है या वेब सर्वर सेट किया है, तो आपने ज़रूर TS और NTS जैसे शब्द देखे होंगे। या फिर डॉक्यूमेंटेशन में चेतावनी पढ़ी होगी: "Thread-safe या non-thread-safe वर्जन चुनें"। और तुरंत सवाल आता है: "ये क्या है? और गलत चुनने पर क्या होगा?"
\n\nयह लेख PHP की दुनिया में आपका गाइड है। हम समझेंगे कि thread safe (TS) और non-thread safe (NTS) बिल्ड में क्या अंतर है, कब किसका उपयोग करें, और एक्सटेंशन की असंगति के जाल से कैसे बचें। चलिए शुरू करते हैं!
\n\nसीधी बात: थ्रेड सेफ्टी क्या है?
\n\nसमझिए, PHP एक रसोइया है और आपकी वेबसाइट पर आने वाला हर अनुरोध एक नया ऑर्डर है। Non-thread safe मोड में हर ऑर्डर के लिए अलग रसोइया अपनी अलग रसोई में काम करता है। सबके अपने बर्तन, चाकू और सामान। कोई साझा मेमोरी नहीं, कोई झगड़ा नहीं।
\n\nThread safe मोड में एक ही रसोइया कई हाथों (थ्रेड्स) से काम करता है। सब एक ही रसोई, एक ही औज़ार और एक ही मेमोरी शेयर करते हैं। यहाँ मुश्किल यह है कि एक ही चाकू को दो हाथ एक साथ न पकड़ लें। इसके लिए लॉक और सिंक्रोनाइज़ेशन चाहिए — यही है थ्रेड सेफ्टी (thread safety)।
\n\nसीधे शब्दों में: Thread Safe (TS) — PHP मल्टी-थ्रेडेड वातावरण में काम कर सकता है, जहाँ एक प्रोसेस एक साथ कई अनुरोध हैंडल करता है। Non-Thread Safe (NTS) — PHP सिंगल-थ्रेड मोड में काम करता है, जहाँ हर अनुरोध के लिए अलग प्रोसेस बनता है।
\n\nTS और NTS वर्जन कब और क्यों आए?
\n\nपहले PHP Apache के लिए एक मॉड्यूल (mod_php) के रूप में विकसित हुआ। Apache दो मोड में काम करता है: prefork (एक प्रोसेस प्रति अनुरोध) और worker (एक प्रोसेस, कई थ्रेड)। Prefork के लिए थ्रेड सेफ्टी ज़रूरी नहीं — हर अनुरोध अलग है। लेकिन worker के लिए यह बहुत ज़रूरी है।
\n\nबाद में, FastCGI (PHP-FPM) और Nginx के बढ़ते उपयोग से पता चला: इनमें PHP के अंदर मल्टीथ्रेडिंग की ज़रूरत नहीं। FastCGI अलग-अलग प्रोसेस चलाता है, और हर प्रोसेस स्वतंत्र रूप से काम करता है। तो फिर भारी लॉकिंग कोड साथ ले जाने की क्या ज़रूरत? इस तरह हल्के non-thread safe बिल्ड आए।
\n\nकैसे पता करें कि आपके पास PHP का कौन सा वर्जन है?
\n\nसबसे आसान तरीका — कंसोल या PHP स्क्रिप्ट में यह चलाएँ:
\n\n<?php\nphpinfo();\n?>\n\nThread Safety लाइन ढूँढें। अगर enabled लिखा है — तो आपके पास TS वर्जन है। अगर disabled — तो NTS।
\n\nदूसरा तरीका — कमांड php -i | findstr "Thread" (Windows) या php -i | grep Thread (Linux/macOS) चलाएँ।
डिस्ट्रीब्यूशन के नामों में अंतर
\n\nआधिकारिक साइट windows.php.net पर आपको ऐसे नाम दिखेंगे:
\n\n- \n
- php-8.3.0-Win32-vs16-x64.zip — आमतौर पर यह NTS है (लेकिन विवरण जाँचें) \n
- php-8.3.0-Win32-vs16-x64-ts.zip — यह TS वर्जन है, इसमें साफ़
-tsलिखा है \n
Linux पर आमतौर पर बिल्ड अलग नहीं होते — वहाँ एक ही बाइनरी होती है जो थ्रेड सपोर्ट (ZTS — Zend Thread Safety) के साथ बनी होती है, लेकिन असली मल्टीथ्रेडिंग सिर्फ Apache worker के साथ ही चालू होती है।
\n\nव्यावहारिक परिदृश्य: कब TS चुनें, कब NTS?
\n\nपरिदृश्य 1: Apache + mod_php (worker MPM)
\n\nअगर आप Apache को worker या event MPM (मल्टी-थ्रेडेड मोड) के साथ उपयोग कर रहे हैं — तो आपको सिर्फ TS वर्जन चाहिए। नहीं तो — घातक त्रुटियाँ, सर्वर क्रैश और डेटा लॉस हो सकता है। यह कुछ इस तरह दिखेगा