প্যারালেল কম্পিউটেশন ব্যবহার করে টেক্সটে অক্ষরের ফ্রিকোয়েন্সি গণনা করুন।
প্যারালেলিজম মানে হলো এমন কিছু কাজ প্যারালেলে করা, যেগুলো সিকোয়েন্সিয়ালিও করা যায়। এর একটি কমন উদাহরণ হলো অক্ষরের ফ্রিকোয়েন্সি গণনা করা। টেক্সটের একটি তালিকায় প্রতিটি অক্ষরের মোট ফ্রিকোয়েন্সি হিসাব করতে প্যারালেলিজম ব্যবহার করুন।
Go কনকারেন্সি সমর্থন করে "গোরুটিন"-এর মাধ্যমে, যেগুলো go কিওয়ার্ড দিয়ে চালু করা হয়।
এটি কনকারেন্সি সমর্থন দেওয়ার একটি সরল, হালকা ও রুচিসম্মত উপায়, আর এটি ভাষাটির অন্যতম বড় শক্তি।
আপনি হয়তো লক্ষ্য করবেন, এই অনুশীলনীর নাম প্যারালেল অক্ষর ফ্রিকোয়েন্সি হলেও Go-তে "প্যারালেল" শব্দটি তেমন একটা দেখা যায় না। Gopher-রা একাধিক স্বাধীন গোরুটিন পরিচালনাকে বোঝাতে কনকারেন্ট শব্দটি ব্যবহার করতে পছন্দ করেন (অন্য ভাষার প্রেক্ষাপটে এগুলো "প্রসেস" বা "থ্রেড")। যদিও এই শব্দ দুটি অনেক সময় একে অন্যের বদলে ব্যবহৃত হয়, তবু Gopher-রা কারিগরি দিক থেকে নির্ভুল থাকতে চান এবং গোরুটিনগুলোর আপাতদৃষ্টিতে একসাথে চলার কথা বলার সময় "কনকারেন্ট" ব্যবহার করেন।
আমরা আমাদের প্রোগ্রামগুলো প্যারালেলে চালানোর পরিকল্পনা করতে পারি, আর মাঝে মাঝে সেগুলো প্যারালেলে চলছে বলেও মনে হতে পারে; কিন্তু আমাদের কোডের এক্সিকিউশন কনটেক্সট সম্পর্কে নিশ্চিত জ্ঞান ছাড়া আমরা কেবল এটুকুই নিশ্চিত করতে পারি যে প্রসেসগুলো কনকারেন্টভাবে চলবে। অন্যভাবে বললে, সেগুলো সিকোয়েন্সিয়ালভাবে এত দ্রুত চলতে পারে যে আমরা তা আলাদা করে বুঝতে পারি না, তবে কঠোর অর্থে একসাথে নয়।
আরও জানতে The Go Blog-এর পোস্টটি দেখুন: Concurrency is not parallelism।
Go-তে কনকারেন্সির ফিচারগুলো যদি আপনার কাছে নতুন হয়, তাহলে শুরু করার জন্য এখানে কিছু রিসোর্স রইল। এই অনুশীলনীটি শুরু করার আগে সেগুলো একবার দেখে নেওয়ার পরামর্শ দিই:
সত্যিই গভীরে যেতে চাইলে @kat-co-এর লেখা Concurrency in Go বইটি দেখতে পারেন।
এই অনুশীলনীর ক্ষেত্রে ইউনিট টেস্ট দিয়ে নির্ধারণ করা যায় না আপনি একটি ভালো কনকারেন্ট সমাধান লিখেছেন কি না।
বরং সবচেয়ে ভালো হয় এই অনুশীলনীটি নিজের কম্পিউটারে সমাধান করে go test -bench . দিয়ে বেঞ্চমার্কগুলো চালানো।
একটি ভালো সমাধানের ক্ষেত্রে আপনি দেখবেন, সিকোয়েন্সিয়াল সংস্করণের তুলনায় কনকারেন্ট সংস্করণে প্রতি অপারেশনে ন্যানোসেকেন্ডের সংখ্যা (ns/op) কম।
Exercism-এ সাইন আপ করুন, Go ট্র্যাকের 34টি কনসেপ্ট165টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।
আমরা কনকারেন্সি ও প্যারালালিজমের মধ্যে পার্থক্য নিয়ে আলোচনা করি এবং JavaScript, Go, Elixir ও Rust-এর মতো ভাষাগুলো যে বিভিন্ন পদ্ধতি অবলম্বন করে তা দেখি।