প্যারালেল কম্পিউটেশন ব্যবহার করে টেক্সটে অক্ষরের ফ্রিকোয়েন্সি গণনা করুন।
প্যারালেলিজম মানে হলো এমন কিছু কাজ প্যারালেলে করা, যেগুলো সিকোয়েন্সিয়ালিও করা যায়। এর একটি কমন উদাহরণ হলো অক্ষরের ফ্রিকোয়েন্সি গণনা করা। টেক্সটের একটি তালিকায় প্রতিটি অক্ষরের মোট ফ্রিকোয়েন্সি হিসাব করতে প্যারালেলিজম ব্যবহার করুন।
টাস্ক হলো Lean-এ অ্যাসিনক্রোনাস কোড লেখার প্রধান অ্যাবস্ট্রাকশন। এগুলি হালকা এবং অন্য একটি থ্রেডে সমান্তরালে, কিংবা একই থ্রেডে একসাথে চালানো হতে পারে।
টাস্ক বিশুদ্ধ বা অশুদ্ধ, দুই ধরনেরই হতে পারে।
বিশুদ্ধ টাস্ক তৈরি হয় Task.spawn দিয়ে, যা একটি বিশুদ্ধ কম্পিউটেশন গ্রহণ করে।
অশুদ্ধ টাস্ক তৈরি হয় IO কম্পিউটেশন থেকে, যেমন IO.asTask ব্যবহার করে, যা IO মোনাডের ভিতরে একটি IO α-কে Task α-তে উন্নীত করে।
এই অনুশীলনীতে, calculateFrequencies ফাংশনটি মোনাডিক, যা একটি IO (Std.TreeMap Char Nat) রিটার্ন করে।
এটি IO.asTask-এর মাধ্যমে অশুদ্ধ টাস্ক ব্যবহারের সুযোগ দেয়, এবং চূড়ান্ত মান রিটার্ন করার আগে মধ্যবর্তী গণনার জন্য বিশুদ্ধ টাস্ক তৈরি করাও সম্ভব করে তোলে।
একটি ফাংশনাল ভাষা হিসেবে, Lean-এ বেশিরভাগ মানই পার্সিস্টেন্ট, অর্থাৎ ইমিউটেবল। যে অপারেশনগুলি কোনো মান পরিবর্তন করে বলে মনে হয়, তারা আসলে অনুরোধ করা পরিবর্তনসহ একটি নতুন মান তৈরি করে। এর মানে হলো, ডেটা রেস তৈরি না করেই প্রায়ই টাস্কগুলির মধ্যে মেমরি নিরাপদে ভাগ করে নেওয়া যায়।
তবে মনে রাখবেন, সব ডেটা স্ট্রাকচার সমানভাবে পার্সিস্টেন্ট ব্যবহারের জন্য উপযুক্ত নয়।
উদাহরণস্বরূপ, একটি Array-এর একটি মাত্র এলিমেন্ট আপডেট করতে সাধারণত পুরো অ্যারে কপি করতে হয়।
Std.HashSet ও Std.HashMap-এর ক্ষেত্রেও একই কথা সত্য।
এমন ডেটা স্ট্রাকচারকে দক্ষ করতে Lean রেফারেন্স কাউন্টিং ব্যবহার করে। যতক্ষণ একটি মানের একটি অনন্য রেফারেন্স থাকে, ততক্ষণ আপডেট ডেস্ট্রাক্টিভভাবে করা যায়, ফলে অপ্রয়োজনীয় কপি এড়ানো যায়।
অন্য ডেটা স্ট্রাকচার, যেমন List, Std.TreeSet ও Std.TreeMap, অভ্যন্তরীণভাবে স্ট্রাকচার শেয়ার করার জন্য ডিজাইন করা হয়েছে।
আপডেট করার সময় তারা অপরিবর্তিত নোড পুনরায় ব্যবহার করে, যাতে একাধিক মান সেই নোডগুলির রেফারেন্স শেয়ার করতে পারে।
ফলস্বরূপ, স্ট্রাকচারের কোনো একটি অংশ পরিবর্তন করতে সাধারণত পুরো মান কপি করতে হয় না।
এটি তাদের টাস্কগুলির মধ্যে শেয়ার করার জন্য বিশেষভাবে উপযুক্ত করে তোলে।
প্রতিটি টেস্টের এক্সিকিউশন সময় IO.monoNanosNow ব্যবহার করে ন্যানোসেকেন্ডে মাপা হয় এবং ফলাফলের পাশে দেখানো হয়।
আপনি বিভিন্ন অ্যাপ্রোচ নিয়ে পরীক্ষা-নিরীক্ষা করতে পারেন এবং রানটাইম পারফরম্যান্সে তাদের প্রভাব দেখতে পারেন।
Exercism-এ সাইন আপ করুন, Lean ট্র্যাকের 100টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।
আমরা কনকারেন্সি ও প্যারালালিজমের মধ্যে পার্থক্য নিয়ে আলোচনা করি এবং JavaScript, Go, Elixir ও Rust-এর মতো ভাষাগুলো যে বিভিন্ন পদ্ধতি অবলম্বন করে তা দেখি।