থ্রেড নিরাপদ বা নন-থ্রেড পিএইচপিতে নিরাপদ কী?


772

আমি পিএইচপি-র জন্য বিভিন্ন বাইনারি দেখেছি, যেমন নন-থ্রেড বা থ্রেড নিরাপদ?

এটার মানে কি?

এই প্যাকেজগুলির মধ্যে পার্থক্য কী?


18
আপনার কাছে আরো সুরক্ষা থ্রেড পড়তে পারেন en.wikipedia.org/wiki/Thread_safety পিএইচপি সংক্রান্ত: পিএইচপি থ্রেড-নিরাপদ কি মিথ্যাচার বিশ্বাস করবেন: পিএইচপি থ্রেড-নিরাপদ নয় তবুও পিএইচপি থ্রেড নিরাপদ এবং অ থ্রেড নিরাপদ binarie মধ্যে পার্থক্য আছে প্রচুর সংস্থান পাওয়া যায়। স্ট্যাকওভারফ্লো বা গুগলে এখানে অনুসন্ধান করুন।
টাইগারটাইগার

উত্তর:


667

সম্মতিযুক্ত পদ্ধতির উপর প্রয়োজনীয় পটভূমি:

সমান্তরালে আগত HTTP অনুরোধগুলি পরিচালনা করার জন্য বিভিন্ন ওয়েব সার্ভার বিভিন্ন কৌশল প্রয়োগ করে। একটি দুর্দান্ত জনপ্রিয় কৌশল থ্রেড ব্যবহার করছে - যা হ'ল ওয়েব সার্ভার প্রতিটি আগত অনুরোধের জন্য একটি একক থ্রেড তৈরি / উত্সর্গ করবে। অ্যাপাচি এইচটিটিপি ওয়েব সার্ভার অনুরোধগুলি পরিচালনা করার জন্য একাধিক মডেল সমর্থন করে, যার মধ্যে একটি (কর্মী এমপিএম নামে পরিচিত) থ্রেড ব্যবহার করে। তবে এটি প্রেফার্ক এমপিএম নামে পরিচিত আরেকটি সমাবর্তন মডেল সমর্থন করে যা প্রক্রিয়াগুলি ব্যবহার করে - যা ওয়েব সার্ভার প্রতিটি অনুরোধের জন্য একটি একক প্রক্রিয়া তৈরি / উত্সর্গ করবে।

এছাড়াও অন্যান্য সম্পূর্ণ পৃথক একযোগে মডেল রয়েছে (অ্যাসিনক্রোনাস সকেট এবং আই / ও ব্যবহার করে), পাশাপাশি দুটি বা এমনকি তিনটি মডেল একসাথে মিশ্রিত করে। এই প্রশ্নের উত্তর দেওয়ার উদ্দেশ্যে, আমরা কেবল উপরের দুটি মডেলের সাথেই উদ্বিগ্ন, এবং অ্যাপাচি এইচটিটিপি সার্ভারকে উদাহরণ হিসাবে নিচ্ছি।

কীভাবে পিএইচপি ওয়েব সার্ভারের সাথে "সংহত" হয় তার ব্যাকগ্রাউন্ড দরকার:

পিএইচপি নিজেই প্রকৃত এইচটিটিপি অনুরোধের প্রতিক্রিয়া জানায় না - এটি ওয়েব সার্ভারের কাজ। সুতরাং আমরা প্রসেসিংয়ের জন্য পিএইচপি-র কাছে অনুরোধগুলি ফরওয়ার্ড করার জন্য ওয়েব সার্ভারটি কনফিগার করি, তারপরে ফলাফলটি গ্রহণ করে এটি ব্যবহারকারীর কাছে ফেরত পাঠাতে পারি। পিএইচপি দিয়ে ওয়েব সার্ভার চেইন করার একাধিক উপায় রয়েছে। অ্যাপাচি এইচটিটিপি সার্ভারের জন্য সর্বাধিক জনপ্রিয় "মোড_এফপি"। এই মডিউলটি আসলে পিএইচপি নিজেই, তবে ওয়েব সার্ভারের মডিউল হিসাবে সংকলিত, এবং তাই এটি এর ভিতরেই লোড হয়ে যায়।

অ্যাপাচি এবং অন্যান্য ওয়েব সার্ভারের সাথে পিএইচপি শৃঙ্খলার জন্য অন্যান্য পদ্ধতি রয়েছে তবে মোড_এইচপি সবচেয়ে জনপ্রিয় এবং এটি আপনার প্রশ্নের উত্তর দেওয়ার জন্য পরিবেশন করবে।

আপনার আগে এই বিবরণগুলি বোঝার দরকার নেই, কারণ হোস্টিং সংস্থাগুলি এবং জিএনইউ / লিনাক্স ডিস্ট্রোস আমাদের জন্য প্রস্তুত সমস্ত কিছু নিয়ে আসে।

এখন, আপনার প্রশ্ন উপর!

যেহেতু মোড_এফপি দিয়ে, পিএইচপি সরাসরি অ্যাপাচে লোড হয়ে যায়, যদি অ্যাপাচি যদি তার কর্মী এমপিএম (অর্থাৎ থ্রেডস ব্যবহার করে) ব্যবহার করে সামঞ্জস্য পরিচালনা করে তবে পিএইচপি অবশ্যই এই একই বহু-থ্রেডযুক্ত পরিবেশের মধ্যে পরিচালনা করতে সক্ষম হবে - অর্থ, পিএইচপি করতে হবে অ্যাপাচি দিয়ে সঠিকভাবে বল খেলতে সক্ষম হতে থ্রেড-সেফ থাকুন!

এই মুহুর্তে, আপনার "ঠিক আছে" ভাবতে হবে, সুতরাং যদি আমি একটি বহু-থ্রেডযুক্ত ওয়েব সার্ভার ব্যবহার করছি এবং আমি পিএইচপি এটির মধ্যে এম্বেড করতে চলেছি তবে আমাকে অবশ্যই পিএইচপি এর থ্রেড-নিরাপদ সংস্করণটি ব্যবহার করতে হবে "। এবং এটি সঠিক চিন্তাভাবনা হবে। যাইহোক, এটি হওয়ার সাথে সাথে পিএইচপি-র থ্রেড-সুরক্ষা অত্যন্ত বিতর্কিত । এটি-আপনি-কী-আপনি-কি করছেন তা-সত্যিই-সত্যি-জানা a

চূড়ান্ত নোট

আপনি যদি ভাবছেন তবে আমার ব্যক্তিগত পরামর্শটি হ'ল পিএইচপি যদি আপনার পছন্দ থাকে তবে বহু-থ্রেডযুক্ত পরিবেশে ব্যবহার করবেন না !

শুধুমাত্র ইউনিক্স-ভিত্তিক পরিবেশের কথা বললে, আমি বলতে পারি যে সৌভাগ্যক্রমে, আপনি কেবল এটির কথা ভাবতে হবে যদি আপনি অ্যাপাচি ওয়েব সার্ভারের সাথে পিএইচপি ব্যবহার করতে চান, সেক্ষেত্রে আপনাকে অ্যাপাচের প্রিফার্ক এমপিএমের সাথে যাওয়ার পরামর্শ দেওয়া হয়েছে (যা আপনাকে থ্রেড ব্যবহার করে না, এবং তাই, পিএইচপি থ্রেড-সুরক্ষা কোনও বিষয় নয়) এবং আমি জানি যে সমস্ত জিএনইউ / লিনাক্স ডিস্ট্রিবিউশনগুলি আপনি যখন তাদের প্যাকেজ সিস্টেমের মাধ্যমে অ্যাপাচি + পিএইচপি ইনস্টল করছেন তখন আপনাকে সিদ্ধান্ত নেবে, এমনকি আপনাকে প্ররোচিত না করেই decision একটি পছন্দ জন্য। আপনি যদি অন্য ওয়েবসার্ভার যেমন এনজিনেক্স বা লাইটটিপিডি ব্যবহার করতে যাচ্ছেন তবে আপনার মধ্যে পিএইচপি এম্বেড করার কোনও বিকল্প নেই। আপনি ফাস্টসিজিআই বা সমান কিছু ব্যবহার করার দিকে তাকিয়ে থাকবেন যা আলাদা মডেলটিতে কাজ করে যেখানে পিএইচপি সম্পূর্ণ বাইরে থাকেওয়েব সার্ভারের একাধিক পিএইচপি প্রক্রিয়া সহ উদাহরণস্বরূপ ফাস্টসিজিআইয়ের মাধ্যমে অনুরোধগুলির উত্তর দেওয়ার জন্য ব্যবহৃত হয়। এই জাতীয় ক্ষেত্রে থ্রেড-সুরক্ষাও কিছু যায় আসে না। আপনার ওয়েবসাইটটি কোন সংস্করণ ব্যবহার করছে তা দেখতে আপনার সাইটে একটি ফাইল রাখুন <?php phpinfo(); ?>এবং Server APIপ্রবেশের সন্ধান করুন। এটি CGI/FastCGIবা মত কিছু বলতে পারে Apache 2.0 Handler

যদি আপনি পিএইচপি-র কমান্ড-লাইন সংস্করণটিও দেখেন - থ্রেড সুরক্ষা কোনও বিষয় নয়।

অবশেষে, যদি থ্রেড-সুরক্ষার বিষয়টি বিবেচনা না করে তবে আপনার কোন সংস্করণটি ব্যবহার করা উচিত - থ্রেড-নিরাপদ বা নন-থ্রেড-নিরাপদ? সত্যি বলতে কী, আমার কাছে বৈজ্ঞানিক উত্তর নেই! তবে আমি অনুমান করতে পারি যে নন-থ্রেড-নিরাপদ সংস্করণটি দ্রুত এবং / বা কম বগী, বা অন্যথায় তারা কেবল থ্রেড-নিরাপদ সংস্করণটি দিয়েছিল এবং আমাদের পছন্দটি দেওয়ার জন্য বিরক্ত করবে না!


2
সুতরাং পিএইচপি-এফপিএম থ্রেড হয় না? যেহেতু দ্রুত সিজিআইটি এনজিএনএক্স সার্ভারগুলিতে ব্যবহৃত হয় তাই এটি সমস্যার সমাধান করে।
ক্লোনক্রস

41
অসাধারণ বিবরণ, আমি বহু বছর ধরে পিএইচপি-তে প্রোগ্রামিং করছি এবং এটি কখনই জানতাম না।
প্যাট্রিক

1
@ এক্সনক্রস: সাধারণত এটি সঠিক এবং অনুশীলনে এটি অ্যাপাচের বাইরে পিএইচপি প্রক্রিয়া পরিচালনা করার অন্যতম দুর্দান্ত কারণ। আমি আমার উত্তরে এই দিকটি অতিক্রম করি।
জেএম বেকার

এখানে কেবল সমস্যাটি হ'ল পিএইচপি-এফপিএম উইন্ডোজের অধীনে উপলব্ধ নয়। কমপক্ষে দেশীয় বিল্ড হিসাবে।
ডেনিস ভি

9
পিএইচপি এর থ্রেড সুরক্ষা এখনও "অত্যন্ত বিতর্কিত" (2015 এবং সংস্করণ 7 এ)?
আলটিয়ানো জেরুং

261

আমার জন্য, আমি সর্বদা নন-থ্রেড নিরাপদ সংস্করণ পছন্দ করি কারণ আমি সর্বদা nginx ব্যবহার করি, বা কমান্ড লাইন থেকে পিএইচপি চালাই।

আপনি যদি কোনও সিজিআই বাইনারি, কমান্ড লাইন ইন্টারফেস বা অন্য পরিবেশ হিসাবে যেখানে কেবলমাত্র একক থ্রেড ব্যবহার করা হয় সে হিসাবে পিএইচপি ইনস্টল করলে নন-থ্রেড নিরাপদ সংস্করণটি ব্যবহার করা উচিত।

কোনও কর্মী এমপিএম (মাল্টি-প্রসেসিং মডেল) বা অন্য পরিবেশে যেখানে একাধিক পিএইচপি থ্রেড একই সাথে চলমান হয় সেখানে আপনি যদি পিএইচপিকে অ্যাপাচি মডিউল হিসাবে ইনস্টল করেন তবে একটি থ্রেড-নিরাপদ সংস্করণ ব্যবহার করা উচিত।


1
আপনার উত্তরটি গ্রেগ করা উচিত ছিল: "আপনি যদি
পিএইচপিকে

9
এত পিএইচপি যে উইন্ডোতে এক্সএইচএমপি দিয়ে আসছে এনটিএস বা টিএস?
আবুদায়াহ

1
আপনি যদি পিএইচপি অন্তর্নির্মিত ওয়েব সার্ভার ব্যবহার করেন? অনুকূল পারফরম্যান্সের জন্য পিএইচপি এর কোন রূপটি ব্যবহার করতে হবে?
অ্যারিড

1
@ ডারিও আমি মনে করি এটি কেবল উইন্ডোজ।
গ্রেগ

1
@ খ্রিস্টোফারশো বউ, উত্তরে কেবলমাত্র মতামত রয়েছে। অ্যাপাচি মডিউলের সাথে জেডটিএস ব্যবহার করার কোনও উত্স বা কারণ নেই is এটি কোনও বৈধ উত্তর নয়। এমনকি 217 পিপিএল ভুল এম 8 হতে পারে।
ড্যানিয়েল ডাব্লু।

30

মোডিএফপি সহ অ্যাপাচি এমপিএম প্রেফের্ক ব্যবহার করা হয় কারণ এটি কনফিগার / ইনস্টল করা সহজ। পারফরম্যান্স-ভিত্তিতে এটি মোটামুটি অদক্ষ। স্ট্যাকটি করার জন্য আমার পছন্দের উপায়, ফাস্টসিজিআই / পিএইচপি-এফপিএম। আপনি এমপিএম ওয়ার্কারকে আরও দ্রুত ব্যবহার করতে পারেন। পুরো পিএইচপি অ থ্রেডযুক্ত থাকে, তবে অ্যাপাচি থ্রেডযুক্ত পরিবেশন করে (এটি হওয়া উচিত)।

সুতরাং মূলত, নীচে থেকে উপরে

লিনাক্স

অ্যাপাচি + এমপিএম কর্মী + মোডফাস্টসিজিআই (এফসিজিআই নয়) | (বা) | চেরোকি | (বা) | nginx

পিএইচপি-এফপিএম + এপিসি

ModFCGI সঠিকভাবে পিএইচপি-এফপিএম, বা কোনও বাহ্যিক ফাস্টসিজিআই অ্যাপ্লিকেশন সমর্থন করে না। এটি কেবল নন-প্রসেস পরিচালিত ফাস্টসিজিআই স্ক্রিপ্টগুলিকে সমর্থন করে। পিএইচপি-এফপিএম হ'ল পিএইচপি ফাস্টসিজিআই প্রক্রিয়া পরিচালক।


21

অনুযায়ী পিএইচপি ডকুমেন্টেশন ,

পিএইচপি ডাউনলোড করার সময় থ্রেড সুরক্ষা বলতে কী বোঝায়?

থ্রেড সুরক্ষাটির অর্থ হ'ল বাইনারি একাধিক থ্রেডযুক্ত ওয়েবসার্ভার প্রসঙ্গে যেমন উইন্ডোজে অ্যাপাচি 2-তে কাজ করতে পারে। প্রতিটি থ্রেডে স্থানীয় স্টোরেজ অনুলিপি তৈরি করে থ্রেড সুরক্ষা কাজ করে, যাতে ডেটা অন্য থ্রেডের সাথে সংঘর্ষে না ঘটে।

তাহলে আমি কী নির্বাচন করব? আপনি যদি সিজিআই বাইনারি হিসাবে পিএইচপি চালানোর জন্য চয়ন করেন তবে আপনার থ্রেড সুরক্ষার প্রয়োজন হবে না, কারণ প্রতিটি অনুরোধে বাইনারিটি অনুরোধ করা হয়। আইআইএস 5 এবং আইআইএস 6 এর মতো মাল্টিথ্রেডেড ওয়েবসার্সগুলির জন্য আপনার পিএইচপি এর থ্রেডযুক্ত সংস্করণ ব্যবহার করা উচিত।

নিম্নলিখিত গ্রন্থাগারগুলি থ্রেড নিরাপদ নয়। এগুলি বহু-থ্রেডযুক্ত পরিবেশে ব্যবহারের জন্য প্রস্তাবিত নয়।

  • এসএনএমপি (ইউনিক্স)
  • এমএসকিউএল (ইউনিক্স)
  • আইএমএপ (উইন / ইউনিক্স)
  • সিবাজ-সিটি (লিনাক্স, libc5)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.