আমি এই পিইসিএল প্যাকেজটি থ্রেড নামে পেয়েছি , তবে এখনও প্রকাশ হয়নি। এবং পিএইচপি ওয়েবসাইটে কিছুই আসছে না।
আমি এই পিইসিএল প্যাকেজটি থ্রেড নামে পেয়েছি , তবে এখনও প্রকাশ হয়নি। এবং পিএইচপি ওয়েবসাইটে কিছুই আসছে না।
উত্তর:
এমন কিছু নেই যা আমি সচেতন aware পরবর্তী সর্বোত্তম জিনিসটি হ'ল কেবল একটি স্ক্রিপ্টই সিএলআইয়ের মাধ্যমে আরেকটি স্ক্রিপ্ট চালানো হয় তবে এটি কিছুটা প্রাথমিক। আপনি কী চেষ্টা করছেন এবং এটি কতটা জটিল তা নির্ভর করে এটি বিকল্প হতে পারে বা নাও পারে।
পাইথ্রেডস এক্সটেনশনের জন্য পিএইচপি ম্যানুয়াল থেকে :
pthreads হ'ল একটি অবজেক্ট ওরিয়েন্টেটেড API যা পিএইচপি-তে ব্যবহারকারী-ল্যান্ড মাল্টি-থ্রেডিংয়ের অনুমতি দেয়। এটিতে ওয়েবে বা কনসোলকে লক্ষ্য করে মাল্টি-থ্রেডযুক্ত অ্যাপ্লিকেশন তৈরি করতে আপনার প্রয়োজনীয় সমস্ত সরঞ্জাম অন্তর্ভুক্ত রয়েছে। পিএইচপি অ্যাপ্লিকেশনগুলি থ্রেডস, ওয়ার্কার্স এবং স্ট্যাকবেবলগুলি তৈরি করতে, পড়তে, লিখতে, চালিত করতে এবং সংহত করতে পারে।
এই শোনার মতো অবিশ্বাস্য, এটি সম্পূর্ণ সত্য। আজ, পিএইচপি এটি চেষ্টা করতে ইচ্ছুকদের জন্য বহু-থ্রেড করতে পারে।
পিএইচপি 4 এর প্রথম প্রকাশ, 22 মে 2000, পিএইচপি মাল্টি থ্রেডেড SAPI (সার্ভার এপিআই) পরিবেশে পৃথক থ্রেডে এর দোভাষীর একাধিক উদাহরণ কার্যকর করার জন্য একটি থ্রেড নিরাপদ আর্কিটেকচার সহ প্রেরণ করা হয়েছিল। গত 13 বছর ধরে, এই স্থাপত্যটির নকশাটি বজায় রাখা এবং উন্নত করা হয়েছে: এটি বিশ্বের সবচেয়ে বড় ওয়েবসাইটগুলিতে তখন থেকেই উত্পাদন ব্যবহৃত হচ্ছে।
ব্যবহারকারীর জমিতে থ্রেডিং পিএইচপি দলের পক্ষে কখনই উদ্বেগের বিষয় ছিল না এবং এটি আজও রয়েছে। আপনার বুঝতে হবে যে পৃথিবীতে যেখানে পিএইচপি এটি ব্যবসা করে, সেখানে ইতিমধ্যে স্কেলিংয়ের একটি সংজ্ঞায়িত পদ্ধতি রয়েছে - হার্ডওয়্যার যুক্ত করুন। বহু বছর ধরে পিএইচপি অস্তিত্ব পেয়েছে, হার্ডওয়্যার কম দামে এবং সস্তা হয়েছে এবং তাই পিএইচপি দলের পক্ষে এটি কম উদ্বেগের বিষয় হয়ে দাঁড়িয়েছে। এটি যখন সস্তা হচ্ছিল, এটি আরও অনেক বেশি শক্তিশালী হয়েছিল; আজ, আমাদের মোবাইল ফোন এবং ট্যাবলেটগুলির দ্বৈত এবং কোয়াড কোর আর্কিটেকচার এবং এটির সাথে প্রচুর পরিমাণে র্যাম রয়েছে, আমাদের ডেস্কটপগুলি এবং সার্ভারগুলিতে সাধারণত 8 বা 16 কোর, 16 এবং 32 গিগাবাইট র্যাম থাকে, যদিও আমরা সবসময় দুটি রাখতে সক্ষম না হই বাজেটের মধ্যে এবং দুটি ডেস্কটপ থাকা আমাদের বেশিরভাগের জন্য খুব কমই কার্যকর।
অধিকন্তু, পিএইচপি নন-প্রোগ্রামারটির জন্য লেখা হয়েছিল, এটি অনেক শখের মাতৃভাষা। পিএইচপি খুব সহজেই গ্রহণ করার কারণ হ'ল এটি শেখা ও লেখার সহজ ভাষা। পিএইচপি আজকে এত নির্ভরযোগ্য হওয়ার কারণ হ'ল তার নকশায় বিস্তৃত কাজ এবং পিএইচপি গ্রুপের প্রতিটি সিদ্ধান্তই decision এটি নির্ভরযোগ্যতা এবং নিখরচায় মহানতা এতো বছর পরে স্পট লাইটে রাখে; যেখানে এটি প্রতিদ্বন্দ্বীরা সময় বা চাপ পড়েছে।
মাল্টি-থ্রেড প্রোগ্রামিং বেশিরভাগের পক্ষে সহজ নয় এমনকি সর্বাধিক সুসংগত এবং নির্ভরযোগ্য এপিআই থাকা সত্ত্বেও বিভিন্ন ধরণের চিন্তাভাবনা এবং অনেকগুলি ভুল ধারণা রয়েছে। পিএইচপি গ্রুপটি ব্যবহারকারী ল্যান্ড মাল্টি-থ্রেডিংকে মূল বৈশিষ্ট্য হিসাবে দেখাতে চায় না, এটি কখনও গুরুত্ব সহকারে মনোযোগ দেওয়া হয়নি - এবং ঠিক তাই। পিএইচপি সবার জন্য জটিল হওয়া উচিত নয়।
সমস্ত বিষয় বিবেচনা করা হয়েছে, পিএইচপিকে এটির উত্পাদন প্রস্তুত এবং পরীক্ষিত বৈশিষ্ট্যগুলি ব্যবহার করে আমাদের যা রয়েছে তার থেকে সর্বাধিক উপার্জন করার উপায়কে মঞ্জুরি দেওয়ার অনুমতি দেওয়া থেকে এখনও আরও অনেক সুবিধা রয়েছে, যখন আরও যোগ করা সবসময় কোনও বিকল্প হয় না এবং অনেক কিছুর জন্য কাজের সত্যিই প্রয়োজন হয় না।
যারা এটি অন্বেষণ করতে ইচ্ছুক তাদের জন্য pthreads অর্জন করে, এমন একটি API যা কোনও ব্যবহারকারীকে মাল্টি-থ্রেড পিএইচপি অ্যাপ্লিকেশনগুলির অনুমতি দেয়। এটি এপিআই হ'ল একটি অগ্রগতিতে কাজ, এবং স্থিরতা এবং সম্পূর্ণতার একটি বিটা স্তরের মনোনীত।
এটি সাধারণ জ্ঞান যে পিএইচপি ব্যবহার করে কিছু লাইব্রেরি থ্রেড নিরাপদ নয়, প্রোগ্রামারকে এটি পরিষ্কার হওয়া উচিত যে pthreads এটিকে পরিবর্তন করতে পারে না, এবং চেষ্টা করার চেষ্টা করে না। যাইহোক, যে কোনও লাইব্রেরি যা থ্রেড নিরাপদ সেগুলি ব্যাবহারযোগ্য, যেমন দোভাষীর অন্য কোনও থ্রেড নিরাপদ সেটআপ হিসাবে।
pthreads পজিক্স থ্রেডগুলি ব্যবহার করে (এমনকি উইন্ডোজেও), প্রোগ্রামার যা তৈরি করে তা বাস্তবায়নের আসল থ্রেড হয় তবে এই থ্রেডগুলি কার্যকর হওয়ার জন্য তাদের অবশ্যই পিএইচপি সম্পর্কে সচেতন থাকতে হবে - ব্যবহারকারী কোড নির্বাহ করতে, ভেরিয়েবলগুলি ভাগ করতে এবং যোগাযোগের একটি কার্যকর মাধ্যমের অনুমতি দিতে সক্ষম (সিঙ্ক্রোনাইজেশন)। সুতরাং প্রতিটি থ্রেড ইন্টারপ্রেটারের উদাহরণ দিয়ে তৈরি করা হয়েছে, তবে ডিজাইন অনুসারে, ইন্টারপ্রেটারটি ইন্টারপ্রেটারের অন্যান্য সমস্ত উদাহরণ থেকে বিচ্ছিন্ন হয় - ঠিক যেমন মাল্টি-থ্রেডেড সার্ভার এপিআই পরিবেশের মতো। pthreads একটি বুদ্ধিমান এবং নিরাপদ উপায়ে ব্যবধানটি পূরণ করার চেষ্টা করে। সি তে থ্রেডগুলির প্রোগ্রামারটির উদ্বেগের অনেকগুলি কেবলমাত্র পাইথ্রেডগুলির প্রোগ্রামারটির জন্য নেই, ডিজাইন অনুসারে, পাইথ্রেডগুলি পড়ার অনুলিপি এবং লিখিতভাবে অনুলিপি (র্যাম সস্তা), সুতরাং কোনও দুটি উদাহরণ একই শারীরিক ডেটা ম্যানিপুলেট করে না , তবে তারা উভয়ই অন্য থ্রেডে ডেটা প্রভাবিত করতে পারে।
কেন পড়তে অনুলিপি এবং লিখিত অনুলিপি:
public function run() {
...
(1) $this->data = $data;
...
(2) $this->other = someOperation($this->data);
...
}
(3) echo preg_match($pattern, $replace, $thread->data);
(1) পাঠ, এবং লেখার লকটি যখন পাইথ্রেডস অবজেক্ট ডেটা স্টোরে রাখা হয়, তখন তথ্যটি তার মূল অবস্থান থেকে মেমরির মধ্যে অবজেক্ট স্টোর থেকে অনুলিপি করা হয়। pthreads ভেরিয়েবলের পুনঃনির্ধারণকে সামঞ্জস্য করে না, জেন্ডের যদি এর সাথে আরও কোনও উল্লেখ না থাকে তবে মূল ডেটাটি মুক্ত করতে সক্ষম হয়।
(২) কিছু অপারেশনের পক্ষে যুক্তিটি অবজেক্ট স্টোরকে উল্লেখ করে, মূল তথ্য সঞ্চিত হয়, যা এটি নিজেই (1) এর ফলাফলের অনুলিপি হয়ে ইঞ্জিনের জন্য আবার একটি জভাল পাত্রে অনুলিপি করা হয়, যখন এটি ঘটে একটি রিড লক ধরে থাকে while অবজেক্ট স্টোর, লক প্রকাশ হয় এবং ইঞ্জিন ফাংশন সম্পাদন করতে পারে। যখন জভালটি তৈরি করা হয়, তখন এটি 0 এর একটি পুনরায় গণনা করে, ইঞ্জিনটি অপারেশন শেষ হওয়ার পরে অনুলিপি মুক্ত করতে সক্ষম করে, কারণ এর সাথে অন্য কোনও উল্লেখ নেই।
(3) প্রিগ_ম্যাচ করার সর্বশেষ যুক্তিটি ডেটা স্টোরের উল্লেখ করে, একটি পঠিত লক পাওয়া যায়, (1) এ সেট করা ডেটা আবার একটি জওয়ালে অনুলিপি করা হয়, আবার 0 এর একটি রি-কাউন্ট সহ লকটি প্রকাশ করা হয়, প্রিগ_ম্যাচ-এ কল চালিত হয় ডেটার অনুলিপি, এটি নিজেই মূল ডেটার একটি অনুলিপি।
জানা বিষয়গুলি:
অবজেক্ট স্টোরের হ্যাশ টেবিল যেখানে ডেটা সংরক্ষণ করা হয়, থ্রেড নিরাপদ,
জেন্ডের মাধ্যমে পিএইচপি-র সাথে প্রেরিত TsHashTable এর উপর ভিত্তি করে।
অবজেক্ট স্টোরটিতে রিড ও রাইটিং লক রয়েছে, টিএসএইচশটবেলে একটি অতিরিক্ত অ্যাক্সেস লক সরবরাহ করা হয় যেমন প্রয়োজন হয় (এবং এটি, var_dump / মুদ্রণ_আর, পিএইচপি ইঞ্জিন তাদের রেফারেন্স করতে চাইলে সম্পত্তিগুলিতে সরাসরি অ্যাক্সেস করতে পারে) পাইথ্রেডগুলি TsHashTable কে ম্যানিপুলেট করতে পারে সংজ্ঞায়িত API এর বাইরে।
লকগুলি কেবল তখনই অনুলিপি করা হয় যখন অনুলিপিগুলি কার্যকর করা হয়, যখন অনুলিপিগুলি তৈরি করা হয় তালাগুলি প্রকাশিত হয়, একটি বুদ্ধিমান ক্রমে।
এর অর্থ:
যখন কোনও লিখন ঘটে তখন কেবল একটি পঠন এবং রাইটিং লকই থাকে না, তবে অতিরিক্ত অ্যাক্সেস লক থাকে। টেবিলটি নিজেই লক হয়ে আছে, অন্য প্রসঙ্গ এটি লক করতে, পড়তে, লিখতে বা প্রভাবিত করতে পারে এমন কোনও সম্ভাব্য উপায় নেই।
যখন কোনও পঠন ঘটে তখন কেবল পঠিত লকটি রাখা হয় না, তবে অতিরিক্ত অ্যাক্সেস লকটিও আবার টেবিলটি লক হয়ে যায়।
কোনও দুটি বিষয় বস্তু স্টোর থেকে শারীরিকভাবে বা একযোগে একই ডেটা অ্যাক্সেস করতে পারে না, তবে যে কোনও প্রসঙ্গে রেফারেন্স দিয়ে তৈরি লেখাগুলি কোনও রেফারেন্সের সাথে কোনও প্রসঙ্গে পড়া ডেটা প্রভাবিত করবে।
এটি কোনও কিছুই আর্কিটেকচার ভাগ করে নেওয়া হয়নি এবং অস্তিত্বের একমাত্র উপায় সহ-অস্তিত্ব। যারা কিছুটা বুদ্ধিমান তারা দেখতে পাবে, এখানে অনেক অনুলিপি চলছে, এবং তারা ভাববেন যে এটি কোনও ভাল জিনিস কিনা। বেশ কপি করা গতিশীল রানটাইমের মধ্যে চলে আসে, এটি একটি গতিশীল ভাষার গতিশীলতা। pthreads বস্তুর স্তরে প্রয়োগ করা হয়, কারণ একটি বস্তুর উপর ভাল নিয়ন্ত্রণ অর্জন করা যায় তবে পদ্ধতিগুলি - প্রোগ্রামার যে কোডটি চালায় - তার অন্য প্রসঙ্গ রয়েছে, লকিং এবং অনুলিপি মুক্ত - স্থানীয় পদ্ধতির সুযোগ। পাইথ্রেডস অবজেক্টের ক্ষেত্রে অবজেক্ট স্কোপটিকে প্রসঙ্গের মধ্যে ডেটা ভাগ করার উপায় হিসাবে বিবেচনা করা উচিত, এটিই এর উদ্দেশ্য। এটি মাথায় রেখে আপনি প্রয়োজনীয় জিনিসগুলি না হলে অবজেক্ট স্টোরটিকে লক করা এড়াতে কৌশল অবলম্বন করতে পারেন,
পিএইচপি-র জন্য উপলব্ধ বেশিরভাগ লাইব্রেরি এবং এক্সটেনশানগুলি তৃতীয় পক্ষের কাছাকাছি পাতলা মোড়ক, পিএইচপি মূল কার্যকারিতা একটি ডিগ্রি একই জিনিস। pthreads প্যাসিক্স থ্রেডগুলির চারপাশে একটি পাতলা মোড়ক নয়; এটি পোস্টিক্স থ্রেডের উপর ভিত্তি করে থ্রেডিং এপিআই। পিএইচপি-তে থ্রেডগুলি প্রয়োগ করার কোনও অর্থ নেই যা এর ব্যবহারকারীরা বুঝতে পারে না বা ব্যবহার করতে পারে না। এমন কোনও কারণ নেই যে কোনও ব্যক্তি মুটেক্স কী বা না জানে সে সম্পর্কে দক্ষতা এবং সংস্থান উভয় ক্ষেত্রেই তাদের যা আছে তার সব থেকে সুবিধা নিতে সক্ষম হওয়া উচিত নয়। একটি অবজেক্টের মতো কোনও বস্তু ফাংশন করে, তবে যেখানেই দুটি প্রসঙ্গ অন্যথায় সংঘর্ষিত হয়, pthreads স্থিতিশীলতা এবং সুরক্ষা সরবরাহ করে।
যে কেউ জাভাতে কাজ করেছেন, তারা জাভাতে অজানা পদার্থ এবং থ্রেডিংয়ের মধ্যে মিল দেখতে পাবেন, সেই একই লোকদের সন্দেহ নেই যে কনকন্টারমোডফিকেশন এক্সেক্সশন নামে একটি ত্রুটি দেখেছেন - কারণ এটি দুটি থ্রেড একই শারীরিক ডেটা লিখলে জাভা রানটাইম দ্বারা উত্থিত ত্রুটি বলে মনে হচ্ছে একই সময়ে। কেন এটি বিদ্যমান তা আমি বুঝতে পেরেছি, তবে এটি আমাকে স্তম্ভিত করে তোলে যে তারা যতটা সস্তা সংস্থান দিয়ে, রানটাইম ব্যবহারকারীর পক্ষে সুরক্ষার জন্য সঠিক এবং একমাত্র সময়ে যে সুরক্ষার ব্যবস্থা করা সম্ভব হয়েছিল তা সঠিকভাবে সনাক্ত করতে সক্ষম হয় এবং এটি বেছে নিয়েছে সঞ্চালনের সময় এবং ডেটাতে অ্যাক্সেস না করে রানটাইমে একটি মারাত্মক ত্রুটি নিক্ষেপ করুন।
এ জাতীয় কোনও বোকা ত্রুটি pthreads দ্বারা নির্গত হবে না, থ্রিডিং হিসাবে স্থিতিশীল হিসাবে স্থির, এবং সম্ভব হিসাবে সামঞ্জস্যপূর্ণ করতে এপিআই লেখা হয়েছে, আমি বিশ্বাস করি।
মাল্টি-থ্রেডিং কোনও নতুন ডাটাবেস ব্যবহার করার মতো নয়, ম্যানুয়ালটিতে প্রতিটি শব্দ এবং pthreads সহ পাঠানো উদাহরণগুলিতে ঘনিষ্ঠ মনোযোগ দেওয়া উচিত।
শেষ পর্যন্ত, পিএইচপি ম্যানুয়াল থেকে:
pthreads ছিল এবং বেশ ভাল ফলাফলের একটি পরীক্ষা। এর যে কোনও সীমাবদ্ধতা বা বৈশিষ্ট্য যে কোনও সময় পরিবর্তন হতে পারে; এটাই পরীক্ষার প্রকৃতি। এটি সীমাবদ্ধতা - প্রায়শই প্রয়োগের দ্বারা আরোপিত - সঙ্গত কারণেই বিদ্যমান; পাইথ্রেডগুলির লক্ষ্য হ'ল যে কোনও স্তরে পিএইচপি-তে মাল্টি-টাস্কিংয়ের একটি ব্যবহারযোগ্য সমাধান সরবরাহ করা। যে পরিবেশে pthreads কার্যকর করে, স্থিতিশীল পরিবেশ সরবরাহের জন্য কিছু বিধিনিষেধ এবং সীমাবদ্ধতা প্রয়োজন।
এখানে উইলকো যা প্রস্তাব করেছিলেন তার একটি উদাহরণ:
$cmd = 'nohup nice -n 10 /usr/bin/php -c /path/to/php.ini -f /path/to/php/file.php action=generate var1_id=23 var2_id=35 gen_id=535 > /path/to/log/file.log & echo $!';
$pid = shell_exec($cmd);
মূলত এটি কমান্ড লাইনে পিএইচপি স্ক্রিপ্ট কার্যকর করে, তবে সঙ্গে সঙ্গে পিআইডি ফিরিয়ে দেয় এবং তারপরে পটভূমিতে চলে। (প্রতিধ্বনি ures! পিআইডি ব্যতীত অন্য কোনও কিছু ফেরত না তা নিশ্চিত করে)) এটি আপনার পিএইচপি স্ক্রিপ্টটি চালিয়ে যেতে বা আপনি চাইলে প্রস্থান করতে পারবেন। আমি এটি ব্যবহার করার পরে, আমি ব্যবহারকারীকে অন্য পৃষ্ঠায় পুনঃনির্দেশিত করেছি, যেখানে প্রতি 5 থেকে 60 সেকেন্ডে প্রতিবেদনটি এখনও চলছে কিনা তা পরীক্ষা করার জন্য একটি এজেএক্স কল করা হয়। (জিন_আইডি এবং এর সাথে সম্পর্কিত ব্যবহারকারীকে সংরক্ষণ করার জন্য আমার কাছে একটি টেবিল রয়েছে)) চেক স্ক্রিপ্টটি নিম্নলিখিতটি চালায়:
exec('ps ' . $pid , $processState);
if (count($processState) < 2) {
// less than 2 rows in the ps, therefore report is complete
}
এই কৌশলটিতে এখানে একটি ছোট পোস্ট রয়েছে: http://nsaunders.wordpress.com/2007/01/12/running-a-background-process-in-php/
সংক্ষেপে: হ্যাঁ, পিএইচপিতে মাল্টিথ্রেডিং রয়েছে তবে পরিবর্তে আপনার মাল্টিপ্রসেসিং ব্যবহার করা উচিত।
থ্রেড এবং প্রক্রিয়াগুলির পার্থক্য সম্পর্কে সর্বদা কিছুটা বিভ্রান্তি থাকে, তাই আমি উভয়কেই শীঘ্রই বর্ণনা করব:
আপনি পিএইচপি সহ নতুন প্রক্রিয়াগুলি (এটিতে একটি নতুন থ্রেডও রয়েছে) তৈরি করে সমান্তরাল কম্পিউটিং অর্জন করতে পারেন। যদি আপনার থ্রেডগুলিতে খুব বেশি যোগাযোগ বা সমন্বয় প্রয়োজন না হয় তবে এটি আপনার পছন্দ, কারণ প্রক্রিয়াগুলি বিচ্ছিন্ন এবং একে অপরের কাজে হস্তক্ষেপ করতে পারে না। এমনকি যদি একটি ক্র্যাশ হয় তবে তা অন্যদের জন্য উদ্বেগ প্রকাশ করে না। আপনার যদি খুব বেশি যোগাযোগের প্রয়োজন হয় তবে আপনার "মাল্টিথ্রেডিং" বা পড়তে হবে - দুঃখের সাথে - অন্য একটি প্রোগ্রামিং ভাষা ব্যবহার করার কথা বিবেচনা করুন, কারণ আন্তঃ-প্রক্রিয়া যোগাযোগ এবং সিঙ্ক্রোনাইজেশন অনেক জটিলতার পরিচয় দেয়।
পিএইচপি-তে আপনার একটি নতুন প্রক্রিয়া তৈরির দুটি উপায় রয়েছে:
ওএসকে এটি আপনার জন্য করুন : আপনি আপনার অপারেশন সিস্টেমকে একটি নতুন প্রক্রিয়া তৈরি করতে এবং এতে একটি নতুন (বা একই) পিএইচপি স্ক্রিপ্ট চালাতে বলতে পারেন।
জন্য লিনাক্সের আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন বা ড্যারিল হেইনের উত্তর বিবেচনা করতে পারেন :
$cmd = 'nice php script.php 2>&1 & echo $!';
pclose(popen($cmd, 'r'));
জন্য উইন্ডোগুলির আপনি এটি ব্যবহার করতে পারেন:
$cmd = 'start "processname" /MIN /belownormal cmd /c "script.php 2>&1"';
pclose(popen($cmd, 'r'));
এটি একটি কাঁটাচামচ দিয়ে নিজেই করুন : পিএইচপি ফাংশনটির মাধ্যমে কাঁটাচামচ ব্যবহার করার সম্ভাবনাও সরবরাহ করে pcntl_fork () । এটি কীভাবে করা যায় তার একটি ভাল টিউটোরিয়াল এখানে পাওয়া যাবে তবে আমি দৃ strongly়ভাবে এটি ব্যবহার না করার পরামর্শ দিচ্ছি , কারণ কাঁটাচামচ মানবতা এবং বিশেষত ওওপের বিরুদ্ধে অপরাধ against
মাল্টিথ্রেডিংয়ের সাথে আপনার সমস্ত থ্রেডগুলি তাদের সংস্থানগুলি ভাগ করে দেয় যাতে আপনি খুব সহজে ওভারহেড ছাড়াই সহজেই যোগাযোগ করতে পারেন এবং সেগুলিকে সিঙ্ক্রোনাইজ করতে পারেন। অন্যদিকে আপনাকে জানতে হবে আপনি কী করছেন, যেহেতু রেস শর্ত এবং ডেডলকগুলি উত্পাদন করা সহজ তবে ডিবাগ করা খুব কঠিন।
স্ট্যান্ডার্ড পিএইচপি কোনও মাল্টিথ্রেডিং সরবরাহ করে না তবে একটি (পরীক্ষামূলক) এক্সটেনশন রয়েছে যা আসলে করে - pthreads । এর এপিআই ডকুমেন্টেশন এমনকি এটি পিএইচপিএন.নে রূপান্তরিত করে । এটি দিয়ে আপনি যেমন পারেন তেমন কিছু করতে পারেন বাস্তব প্রোগ্রামিং ভাষায় :-) এটি:
class MyThread extends Thread {
public function run(){
//do something time consuming
}
}
$t = new MyThread();
if($t->start()){
while($t->isRunning()){
echo ".";
usleep(100);
}
$t->join();
}
জন্য লিনাক্স এখানে স্ট্যাকওভারফ্লোতে একটি ইনস্টলেশন গাইড রয়েছে ।
জন্য উইন্ডোজের এখন একটি রয়েছে:
[PhpDirectory] / php.ini সম্পাদনা করুন এবং নিম্নলিখিত লাইনটি সন্নিবেশ করুন
extension=php_pthreads.dll
উপরের স্ক্রিপ্টটির সাথে কিছুটা ঘুম বা ঠিক সেখানেই মন্তব্য রয়েছে যেখানে এটি পরীক্ষা করুন।
এবং এখন বড় বাট : যদিও এটি সত্যিই কাজ করে, পিএইচপি মূলত মাল্টিথ্রেডিংয়ের জন্য তৈরি করা হয়নি। পিএইচপি-র একটি থ্রেড-নিরাপদ সংস্করণ বিদ্যমান রয়েছে এবং v5.4 হিসাবে এটি প্রায় বাগ-মুক্ত বলে মনে হচ্ছে তবে বহু-থ্রেডযুক্ত পরিবেশে পিএইচপি ব্যবহার করা পিএইচপি ম্যানুয়ালটিতে এখনও নিরুৎসাহিত করা হয়েছে (তবে তারা কেবল তাদের ম্যানুয়ালটি আপডেট করেনি এটি, এখনও)। আরও বড় সমস্যা হতে পারে যে প্রচুর সাধারণ এক্সটেনশান থ্রেড-নিরাপদ নয় । সুতরাং আপনি এই পিএইচপি এক্সটেনশনের সাহায্যে থ্রেড পেতে পারেন তবে আপনি যে ফাংশনগুলির উপর নির্ভর করছেন সেগুলি এখনও থ্রেড-নিরাপদ নয় যাতে আপনি সম্ভবত বর্ণের পরিস্থিতি, ডেডলকস এবং এমন কি কোডের মুখোমুখি হবেন যে আপনি নিজের লেখেন নি ...
থ্রেডের অনুরূপ কিছু অর্জন করতে আপনি pcntl_fork () ব্যবহার করতে পারেন । প্রযুক্তিগতভাবে এটি পৃথক প্রক্রিয়া, সুতরাং উভয়ের মধ্যে যোগাযোগ থ্রেডগুলির সাথে এতটা সহজ নয়, এবং আমি বিশ্বাস করি যে পিএইচপি যদি অ্যাপাচি দ্বারা ডাকা হয় তবে এটি কার্যকর হবে না।
যদি কেউ চিন্তা করে তবে আমি পিএইচপি_থ্রেডিং পুনরুদ্ধার করেছি (থ্রেডের মতো নয়, তবে একই) এবং আমার কাছে আসলে এটি এমন পর্যায়ে পৌঁছেছে যেখানে এটি কিছুটা ভালভাবে কাজ করে!
pcntl_fork()
আপনি যা অনুসন্ধান করছেন তা কিন্তু এর প্রক্রিয়াটি থ্রেডিং না করে কাঁটাচামচ করে। সুতরাং আপনার কাছে ডেটা এক্সচেঞ্জের সমস্যা হবে। তাদের সমাধানের জন্য আপনি পিএইচপিএস সেম্যাফোর ফাংশনগুলি ব্যবহার করতে পারেন ( http://www.php.net/manual/de/ref.sem.php ) বার্তাগুলির সারি ভাগ করা মেমরি বিভাগের চেয়ে কিছুটা সহজ হতে পারে।
যাইহোক, একটি কৌশল যা আমি একটি ওয়েব ফ্রেমওয়ার্কে ব্যবহার করছি যা আমি বিকাশ করছি যা কোনও ওয়েব পৃষ্ঠার রিসোর্স নিবিড় ব্লকগুলি লোড করে (সম্ভবত বাহ্যিক অনুরোধের সাথে) সমান্তরাল: আমি কোন ডেটার জন্য অপেক্ষা করছি তা জানতে আমি একটি কাজের সারি করছি এবং তারপরে আমি কাঁটাচামচ করছি প্রতিটি প্রক্রিয়া জন্য কাজ বন্ধ। একবার হয়ে গেলে তারা এপিসি ক্যাশে তাদের ডেটা সঞ্চয় করে অনন্য কী দ্বারা পিতামাতার প্রক্রিয়াটি অ্যাক্সেস করতে পারে। প্রতিটি তথ্য সেখানে উপস্থিত থাকলে এটি অবিরত থাকে। আমি সাধারণ ব্যবহার করছিusleep()
অপেক্ষা করার জন্য কারণ আন্তঃ প্রক্রিয়া যোগাযোগ অ্যাপাচে সম্ভব নয় (বাচ্চারা তাদের পিতামাতার সাথে সংযোগটি আলগা করে জম্বি হয়ে যাবে ...)। সুতরাং এটি আমাকে সর্বশেষে নিয়ে আসে: প্রতিটি শিশুকে আত্মহত্যা করা এটি গুরুত্বপূর্ণ! পাশাপাশি ক্লাস রয়েছে যেগুলি কাঁটাচামচ প্রক্রিয়া করে তবে ডেটা রাখে, আমি সেগুলি পরীক্ষা করিনি তবে জেন্ডার কাঠামোর একটি রয়েছে এবং তারা সাধারণত ধীর কিন্তু নির্ভরযোগ্য কোড করে। আপনি এখানে পেতে পারেন:
http://zendframework.com/manual/1.9/en/zendx.console.process.unix.overview.html
আমার মনে হয় তারা shm বিভাগগুলি ব্যবহার করে! ভাল শেষ তবে অন্তত এই জেন্ড ওয়েবসাইটটিতে একটি ত্রুটি আছে, উদাহরণে ছোটখাটো ভুল।
while ($process1->isRunning() && $process2->isRunning()) {
sleep(1);
}
should of course be:
while ($process1->isRunning() || $process2->isRunning()) {
sleep(1);
}
পি থ্রেডসের উপর ভিত্তি করে একটি থ্রেডিং এক্সটেনশন তৈরি করা হচ্ছে যা https://github.com/krakjoe/pthreads এ খুব আশাব্যঞ্জক দেখায়
কেবলমাত্র একটি আপডেট, দেখে মনে হচ্ছে পিএইচপি ছেলেরা থ্রেড সমর্থন করার জন্য কাজ করছে এবং এটি এখন উপলব্ধ।
এটির লিংকটি এখানে: http://php.net/manual/en/book.pthreads.php
আমার একটি পিএইচপি থ্রেডিং ক্লাস রয়েছে যা এখন দু'বছর ধরে একটি উত্পাদন পরিবেশে নির্বিঘ্নে চলছে।
সম্পাদনা: এটি এখন সুরকার গ্রন্থাগার হিসাবে এবং আমার এমভিসি কাঠামোর অংশ হিসাবে হাজার এমভিসি হিসাবে উপলভ্য।
আমি জানি এটি একটি উপায় পুরানো প্রশ্ন, তবে আপনি http://phpthreadlib.sourceforge.net/ এ দেখতে পারেন
দ্বি-দিকনির্দেশক যোগাযোগ, Win32 এর জন্য সমর্থন, এবং কোনও এক্সটেনশানের প্রয়োজন নেই।
appserver
টেকডিভিশন থেকে কখনও শুনেছেন ?
এটি পিএইচপিতে লিখিত এবং উচ্চ ট্র্যাফিক পিএইচপি অ্যাপ্লিকেশনগুলির জন্য মাল্টিথ্রেডগুলি পরিচালনা করার জন্য একটি অ্যাপসভার হিসাবে কাজ করে। এখনও বিটাতে রয়েছে তবে খুব ছড়িয়ে পড়েছে।
বরং অস্পষ্ট, এবং শীঘ্রই হ্রাস করা হবে, বৈশিষ্ট্যযুক্ত টিকস । আমি কেবল এটির জন্য ব্যবহার করেছি, হ'ল কোনও স্ক্রিপ্টকে সিকিল (সিটিআরএল + সি) ক্যাপচার করার অনুমতি দেয় এবং মনোযোগ দিয়ে বন্ধ করে দেয়।
pcntl_fork()
এপাচে ফোন করা হলে এই ( ) কাজ করবে কিনা কেউ জানেন ?