Go প্রোগ্রামিং ভাষার সবচেয়ে জনপ্রিয় দিকগুলির মধ্যে একটি হল কম্পিউটারের একই সাথে অনেকগুলি কাজ সম্পন্ন করার ক্ষমতার জন্য এটির প্রথম-শ্রেণীর সমর্থন। একই সাথে কোড চালানোর ক্ষমতা প্রোগ্রামিংয়ে আরও গুরুত্বপূর্ণ হয়ে উঠছে কারণ কম্পিউটারগুলি কোডের একক প্রবাহ দ্রুত কার্যকর করা থেকে একই সাথে অনেকগুলি স্ট্রিম চালানোর দিকে চলে যায়। প্রোগ্রামগুলিকে দ্রুত চালানোর জন্য , প্রোগ্রামারদের অবশ্যই সেগুলিকে একই সাথে চালানোর জন্য ডিজাইন করতে হবে যাতে সিস্টেমের প্রতিটি সমসাময়িক উপাদান অন্যদের থেকে স্বাধীনভাবে কার্যকর করতে পারে।
দুটি Go কার্যকারিতা, Goroutines এবং চ্যানেল একসাথে নিযুক্ত করার সময় একত্রিত হওয়া সহজ করে তোলে। Goroutines এই ক্ষমতার জন্য মৌলিক প্রাথমিক প্রকার অফার করে। মেমরি স্পেস, ইন্টার-থ্রেড ইন্টারঅ্যাকশন, এবং নেটওয়ার্ক কানেক্টিভিটি সম্পর্কিত Goroutines কম ব্যয়বহুল। থ্রেডের তুলনায় তাদের একটি ভাল স্টার্টআপ সময় রয়েছে, যা অনেক প্রোগ্রামিং ভাষা সমর্থন করে। সারাংশে, Go Goroutines কে জাভা এবং অন্যান্য প্রোগ্রামিং ভাষা থ্রেড হিসাবে উল্লেখ করে।
Goroutines কি?
একটি গোরুটিন হল গোলং-এর একটি সাধারণ বাস্তবায়ন থ্রেড যা বাকি প্রোগ্রামের সাথে একযোগে সঞ্চালিত হয়। Goroutines সাশ্রয়ী হয় যখন স্ট্যান্ডার্ড থ্রেডের সাথে সাদৃশ্যপূর্ণ হয় কারণ একটি গরউটিন তৈরির খরচ অত্যন্ত কম। অতএব, তারা সমসাময়িক প্রোগ্রামিংয়ের জন্য Go -তে ব্যাপকভাবে নিযুক্ত হন। প্রতিটি প্রোগ্রামে অন্তত একটি একক গোরুটিন থাকে যা প্রধান গোরুটিন হিসাবে পরিচিত। প্রধান গোরুটিন অন্যান্য সমস্ত গোরুটিন নিয়ন্ত্রণ করে; এইভাবে, যদি প্রধান গুরুটিন বন্ধ হয়ে যায়, স্ক্রিপ্টের অন্যান্য সমস্ত গোরুটিনও একইভাবে কাজ করে। Goroutine সবসময় পটভূমিতে সক্রিয়.
উদাহরণ: এখানে একটি উদাহরণ: আপনি আপনার নোটবুকে কিছু লিখছেন এবং ক্ষুধার্ত হচ্ছেন; আপনি একটি বিরতি নেবেন এবং কিছু খাবার পাবেন। তারপর আবার লেখা শুরু করুন। আপনি এখন সমসাময়িক কর্মসংস্থান হিসাবে বিবেচিত সময় উইন্ডো দ্বারা দুটি ভূমিকা (লেখা এবং খাওয়া) করছেন। এটি হাইলাইট করা উচিত যে এই দুটি কাজ (লেখা এবং খাওয়া) এখনও একই সাথে সম্পন্ন করা প্রয়োজন। যখন আইটেমগুলি একযোগে সম্পন্ন হয়, তখন এটিকে সমান্তরালতা হিসাবে উল্লেখ করা হয় (চিপগুলি কাটার সময় আপনার সেলফোন ব্যবহার করার কল্পনা করুন)। একযোগে অনেক কিছুর সাথে মিথস্ক্রিয়া করা অন্তর্ভুক্ত। কিছু সময়সূচী সহ সমান্তরালতা (এক সাথে অনেকগুলি কাজ সম্পাদন করা) এটির একটি উপশ্রেণী (একই সময়ে সম্পাদন করতে হবে না)।
আমরা ফাংশন কলে go কীওয়ার্ড প্রয়োগ করে একটি গোরুটিন যোগ করতে পারি। একবার আমরা ফাংশনিং কলে go কীওয়ার্ড প্রয়োগ করলে, আমরা পারফরম্যান্সের সাথে সঙ্গতি সেট করব। কিন্তু প্রথমে, চলুন নির্বাহে go কীওয়ার্ড প্রয়োগ করার প্রভাব চিহ্নিত করা যাক। আসুন বিবেচনা করা যাক একটি প্রোগ্রামে দুটি গুরুটিন রয়েছে। পাঠ্য " package main import " প্রোগ্রামের এন্ট্রি হবে। Go, একটি প্যাকেজ প্রধান আমদানি একটি ঘোষণামূলক আমদানি বিবৃতি। প্রধান গোরুটিন ( first goroutine) উহ্য। যখন আমরা go ( f) চালাই, তখন দ্বিতীয় গোরুটিন গঠিত হয় (0)। সাধারণত, আমাদের সফ্টওয়্যার প্রাথমিক ফাংশনের প্রতিটি কমান্ড কার্যকর করবে যখন আমরা পরবর্তী লাইনে যাওয়ার আগে একটি ফাংশন কার্যকর করি।
আমরা পরবর্তী ধাপে যাওয়ার আগে একটি গোরুটিন দিয়ে দ্রুত পদ্ধতিটি চালাতে পারি। ফলস্বরূপ, একটি scanln পদ্ধতি যোগ করা হয়েছে; অন্যথায়, কোডটি সমস্ত সংখ্যা দেখানোর আগেই শেষ হয়ে যাবে। Goroutines তৈরি করা সহজ এবং বড় সংখ্যায় তৈরি করা যেতে পারে। আপনি লক্ষ্য করবেন যে যখন এই সফ্টওয়্যারটি চালানো হয়, তখন গরউটিনগুলি একযোগে না হয়ে ক্রমানুসারে কাজ করে বলে মনে হয়।
থ্রেডের উপর Goroutines এর সুবিধা
Goroutines দাম কম
অন্যান্য প্রক্রিয়ার তুলনায় Goroutines কম ব্যয়বহুল। ভরের আকার মাত্র কয়েক কিলোবাইট, এবং এটি থ্রেডের বিপরীতে প্রোগ্রামের চাহিদা মেটাতে প্রসারিত বা সংকোচন করতে পারে, যার স্ট্যাকের আকার অবশ্যই সংজ্ঞায়িত এবং স্থায়ী হতে হবে।
মাল্টিপ্লেক্সড Goroutines আছে
খুব কম অপারেটিং সিস্টেমের থ্রেড আছে যেখানে তারা মাল্টিপ্লেক্সড। শত শত গোরুটিন সহ একটি প্রোগ্রামে, শুধুমাত্র একটি প্রক্রিয়া থাকতে পারে। বাকি গোরুটিনগুলি নতুন অপারেটিং সিস্টেম প্রক্রিয়ায় স্থানান্তরিত হয়। ধরুন সেই প্রক্রিয়ার কোনো গুরুটিন আটকে আছে, উদাহরণস্বরূপ, যখন এটি ব্যবহারকারীর হস্তক্ষেপ চাইছে। রানটাইম এগুলির প্রতিটিকে পরিচালনা করে এবং আমাদের বিকাশকারীদের এই সূক্ষ্ম জটিলতা থেকে দূরে থাকার সময় একই সাথে পরিচালনা করার জন্য একটি পরিষ্কার API দেওয়া হয়।
Goroutines চ্যানেল ব্যবহার করে যোগাযোগ
Goroutines চ্যানেল ব্যবহার করে কথোপকথন. তারা প্রাসঙ্গিক মেমরি শেয়ার করার সময় ঘটতে ঘটতে জাতি পরিস্থিতি প্রতিরোধ করার উদ্দেশ্যে। চ্যানেলগুলিকে একটি নালীর সাথে তুলনা করা যেতে পারে যা গোরুটিনগুলি ইন্টারঅ্যাক্ট করতে ব্যবহার করে।
চ্যানেল কি?
দুটি গোরুটিন একে অপরের সাথে যোগাযোগ করতে পারে এবং চ্যানেলগুলিতে তাদের ক্রিয়াকলাপ সমন্বয় করতে পারে। এই সফ্টওয়্যারটি ক্রমাগত " ping " মুদ্রণ করবে। একটি চ্যানেল ফর্ম মনোনীত করার জন্য, চ্যানেলে প্রেরিত আইটেমগুলির সাথে " chan " উপসর্গ থাকে৷ এই ক্ষেত্রে, আমরা স্ট্রিংগুলি প্রদান করছি৷ চ্যানেলে, অপারেটর ব্যবহার করে বার্তাগুলি প্রেরণ এবং গ্রহণ করা হয়৷ " ping " প্রেরণকে বোঝায় একটি " ping "।
দুটি গোরুটিনকে সিঙ্কে রাখতে একটি চ্যানেল ব্যবহার করা হয়। চ্যানেল জুড়ে একটি বার্তা পাঠানোর চেষ্টা করার আগে, রাউটার প্রিন্টার এটি গ্রহণ করার জন্য প্রস্তুত না হওয়া পর্যন্ত অপেক্ষা করবে। এর পরিভাষা হল নিষেধ। একটি চ্যানেল তৈরি করার সময়, মেক ফাংশনের জন্য একটি দ্বিতীয় প্যারামিটার ব্যবহার করা যেতে পারে: c:= make (chan int, 1)
চ্যানেলের দিকনির্দেশনা
আমরা একটি চ্যানেল ফর্মের স্থিতিবিন্যাস সংজ্ঞায়িত করতে পারি এবং এটিকে গ্রহণ বা প্রেরণের জন্য পরামিতি নির্ধারণ করতে পারি। পিঙ্গারের পদ্ধতির চিহ্ন, উদাহরণস্বরূপ, এতে পরিবর্তন করা যেতে পারে:
func pinger(c chan<- string)
সি শুধুমাত্র এখন পাঠানো যাবে. c থেকে প্রাপ্তির ফলে একটি কোড ত্রুটি হবে। একইভাবে, আমরা আউটপুট পরিবর্তন করতে পারি:
func printer(c string -chan)
একটি আধা-চ্যানেলের এই সীমাবদ্ধতা নেই। একটি দ্বি-মুখী চ্যানেল এমন একটি পদ্ধতিতে সরবরাহ করা যেতে পারে যা শুধুমাত্র ট্রান্সমিট-অনলি বা গ্রহণযোগ্য চ্যানেলগুলিকে গ্রহণ করে, তবে অন্যভাবে নয়।
কিভাবে একটি Goroutine তৈরি করতে?
একটি গোরুটিন চালু করার পদ্ধতিটি সোজা। একটি গোরুটিন তৈরি করতে ফাংশন কলে " go " কীওয়ার্ডটি প্রয়োগ করুন যা একই সাথে কার্যকর হবে৷ এখানে আমরা একটি গোরুটিন তৈরি করতে যাচ্ছি। ধরুন আমাদের কাছে দুটি ফাংশন সম্বলিত একটি প্রোগ্রাম আছে: একটি হল একটি স্বাগত ফাংশন, এবং অন্যটি প্রধান ফাংশন।
যখন আমরা একটি নতুন গোরুটিন তৈরি করি, তখন স্বাগতম () কোডটি main() ফাংশনের পাশাপাশি কার্যকর হবে। আপনি যখন এই অনুষ্ঠানটি সম্পাদন করেন, আপনি অবাক হবেন। এই প্রোগ্রাম শুধুমাত্র প্রধান অপারেশন পাঠ্য দেখায়. আমরা যে প্রথম গোরুটিন বা নতুন গোরুটিন শুরু করেছি তাতে কী ঘটেছে? কেন এটি ঘটে তা বোঝার জন্য, আমাদের প্রথমে গোরুটিনের দুটি প্রধান বৈশিষ্ট্য জানতে হবে।
- যখন আমরা একটি নতুন গোরুটিন তৈরি করি তখন গুরুটিন ফাংশনটি তাত্ক্ষণিকভাবে প্রতিক্রিয়া জানায়৷ ফাংশন ছাড়াও, ম্যানেজমেন্ট গোরুটিনের উপর নির্ভর করে না, তাই এটি তার সম্পাদন সম্পূর্ণ করার জন্য অপেক্ষা করে না। গুরুটিন ফাংশনের পরে এক্সিকিউশনটি কোডের নিম্নলিখিত ব্লকে হস্তান্তর করা হয়। এই কারণেই গরউটিন থেকে যে কোনো প্রদত্ত পরামিতি উপেক্ষা করা হয়।
- যেকোন অতিরিক্ত গোরুটিন প্রাথমিক গোরুটিনের সাথে একযোগে চালানো উচিত। প্রধান গোরুটিন ব্যর্থ হলে, প্রোগ্রামটি প্রস্থান করবে, এবং কোন অতিরিক্ত গুরুটিন চালানো হবে না।
আপনি এখন বুঝতে পারেন কেন আমাদের কোড কাজ করে না। স্বাগত জানাতে কল করার পরে, হ্যালো গোরুটিন সম্পূর্ণ হওয়ার জন্য অপেক্ষা করার আগে নিয়ন্ত্রণটি কোডের নিম্নলিখিত লাইনে স্থানান্তরিত হয়েছিল এবং প্রধান ফাংশনটি ছিল আউটপুট। প্রধান গোরুটিন মারা গেছে কারণ সঞ্চালনের জন্য কোনো স্ক্রিপ্ট ছিল না, হ্যালো গোরুটিনকে চলতে বাধা দেয়।
আমরা ঘুমের কৌশল ( time.sleep(1 * time.second)) ব্যবহার করেছি 1 সেকেন্ডের জন্য গোরুটিন থামানোর জন্য। স্বাগত জানার জন্য ফাংশনটি এখন প্রধান গোরুটিন প্রস্থান করার আগে সম্পূর্ণ করার জন্য যথেষ্ট সময় আছে। এই সফ্টওয়্যারটি প্রাথমিকভাবে " welcome goroutine " লিখে এবং তারপর মূল ফাংশনটি মুদ্রণের আগে এক সেকেন্ড অপেক্ষা করে। আমরা প্রাথমিক গোরুটিনে ঘুমের কৌশলটি ব্যবহার করি যাতে এটিকে এক মুহুর্তের জন্য বিরতি দেওয়া হয় যাতে অন্যান্য গোরুটিনগুলি সম্পূর্ণ হয়।
একাধিক Goroutines তৈরি করা
আমরা একাধিক গোরুটিন তৈরি করতে অন্য একটি প্রোগ্রাম শুরু করতে যাচ্ছি। আমরা প্রথমে দুটি গোরুটিন তৈরি করে শুরু করতে পারি যা সমান্তরালভাবে কার্যকর হবে। এই দুটি গোরুটিন হল সংখ্যা গরোটিন [গো সংখ্যা()] এবং বর্ণমালার গোরুটিন [ go alphabets ()]।
1 প্রিন্ট করার আগে সংখ্যা গরোটিন 250 ms পর্যন্ত থাকে, 2 প্রিন্ট করার আগে আবার বিশ্রাম নেয় এবং এটি 5 তৈরি না হওয়া পর্যন্ত। একইভাবে, আলফানিউমেরিক গোরুটিন a থেকে e পর্যন্ত অক্ষর প্রদর্শন করে এবং তারপর 400 মিলিসেকেন্ড অপেক্ষা করে। অবশেষে, প্রাথমিক গোরুটিন পূর্ণসংখ্যা এবং আলফানিউমেরিক অক্ষর তৈরি করে এবং একটি হুইকের জন্য বিরতি দেয় এবং তারপরে প্রধান গোরুটিনটি বন্ধ হয়ে যায়।
ঘন ঘন সমসাময়িক প্রোগ্রামিং ভুল
- যখন এটি প্রয়োজন হয় তখন সিঙ্ক্রোনাইজেশনের অনুপস্থিতি
- সময় ব্যবহার করুন। সিঙ্ক্রোনাইজেশন করতে স্লিপ কল
- স্ট্যান্ডার্ড সিঙ্ক প্যাকেজে প্রকারের অনুলিপি মানগুলি ঝুলন্ত গরউটিনগুলি ছেড়ে দিন
- সিঙ্ক কল করুন
- ওয়েটগ্রুপ
- ভুল জায়গায় পদ্ধতি যোগ করুন
- চ্যানেলগুলিকে আগামীকালের বন্ধ চ্যানেল হিসাবে ব্যবহার করুন, শেষ কার্যকরী প্রেরক গোরুটিন থেকে নয়
উপসংহার
এই নিবন্ধে, আমরা একটি প্রোগ্রাম তৈরি করেছি যা একটি গোরুটিন এবং একাধিক গোরুটিন চালু করতে গো কীওয়ার্ড ব্যবহার করে যা একই সাথে পূর্ণসংখ্যা মুদ্রিত করে। সেই প্রোগ্রামটি শুরু করার পরে, আমরা একটি নতুন চ্যানেল প্রতিষ্ঠা করেছি, যেটি আমরা তখন একটি গোরুটিনে সংখ্যা তৈরি করতে এবং সেগুলিকে অন্য গোরুটিনে প্রেরণ করতাম যাতে সেগুলি স্ক্রিনে প্রদর্শিত হতে পারে। মাল্টি-কোর সিস্টেমে আপনার অ্যাপ্লিকেশনগুলির গতি বাড়ানোর জন্য কীভাবে একটি গোরুটিন শুরু করবেন তার চূড়ান্ত প্রদর্শন হিসাবে, আপনি একই সাথে অনেকগুলি "মুদ্রণ" গরউটিন চালু করেছেন৷
আমরা জানি, গরউটিনগুলি আরও দ্রুত এবং দক্ষতার সাথে কাজগুলি সম্পাদন করার একটি উপায়। এটি আপনার অ্যাপ্লিকেশনের কার্যকারিতা উন্নত করতে AppMaster দ্বারা প্রস্তাবিত স্থাপনা পদ্ধতিগুলির মধ্যে একটি। AppMaster, এমনকি প্রোগ্রামিং জ্ঞানের সামান্যতম জ্ঞান নেই এমন ব্যক্তিরাও এমন কাজগুলি সম্পূর্ণ করতে পারে যা ম্যানুয়াল কোডিংয়ের মাধ্যমে সম্পূর্ণ করা চ্যালেঞ্জিং হবে।
AppMaster একটি no-code প্ল্যাটফর্ম যা মোবাইল এবং ওয়েব অ্যাপ্লিকেশনের পাশাপাশি একটি ব্যাকএন্ড তৈরি করতে সক্ষম। একটি আকর্ষণীয় তথ্য AppMaster প্রতি সেকেন্ডে 22,000 লাইনে Go দ্বারা একটি ব্যাকএন্ড তৈরি করে এবং আপনি সোর্স কোড অ্যাক্সেস করতে পারেন।