Selector এর ধারণা এবং এর কাজ

Buffers, Channels, এবং Selectors এর ধারণা - জাভা নিও (Java Nio) - Java Technologies

325

Java NIO (New I/O) একটি শক্তিশালী ফ্রেমওয়ার্ক যা Java 1.4 ভার্সনে পরিচিতি পেয়েছিল এবং এটি ইনপুট/আউটপুট অপারেশনকে আরও দক্ষভাবে পরিচালনা করার জন্য ডিজাইন করা হয়েছে। NIO ফিচারগুলি বিভিন্ন ধরনের I/O অপারেশন পরিচালনা করতে সহায়ক, যেমন ব্লকিং এবং নন-ব্লকিং I/O, বাফার এবং চ্যানেলস, এবং সিলেক্টর।

এখানে আমরা Selector এর ধারণা এবং এটি কীভাবে কাজ করে তা বিস্তারিতভাবে আলোচনা করব।


Selector এর ধারণা

Selector হল Java NIO এর একটি অত্যন্ত গুরুত্বপূর্ণ অংশ, যা নন-ব্লকিং I/O অপারেশন পরিচালনার জন্য ব্যবহৃত হয়। এটি একটি মূল কাঠামো যা একাধিক চ্যানেল (Channel) থেকে ইনপুট/আউটপুট অপারেশন পরিচালনা করতে সাহায্য করে। Selector এর মাধ্যমে আপনি একাধিক I/O চ্যানেলের উপর নজর রাখতে পারেন এবং চ্যানেলগুলি ইভেন্ট (যেমন, ডাটা রেডি হওয়া, রাইট করার জন্য প্রস্তুত হওয়া) ঘটলে সেগুলিতে প্রসেস করতে পারেন।

Selector মূলত non-blocking I/O এর সুবিধা ব্যবহার করে। যখন আপনি একাধিক চ্যানেলের সাথে কাজ করছেন, আপনি একটি থ্রেড ব্যবহার করে একাধিক চ্যানেল মনিটর করতে পারেন এবং যেগুলি প্রস্তুত, তখন সেগুলিতে কাজ করতে পারেন।

Selector এর ব্যবহার

Selector ব্যবহার করে আপনি একাধিক I/O চ্যানেল (যেমন SocketChannel, ServerSocketChannel) একসাথে মনিটর করতে পারেন। এর মাধ্যমে আপনি একাধিক ক্লায়েন্টের সাথে একযোগে কাজ করতে পারেন একটি মাত্র থ্রেড ব্যবহার করে, যা স্কেলেবিলিটি উন্নত করে এবং রিসোর্সের ব্যবহার কমায়।


Selector এর কাজ

Selector কাজ করে একটি ইভেন্ট ড্রিভেন মডেল হিসেবে, যেখানে বিভিন্ন চ্যানেলগুলির I/O স্টেট (যেমন, রিডি, রাইটেবল) পর্যবেক্ষণ করা হয় এবং যখন একটি চ্যানেল ইভেন্টে পৌঁছে, তখন সেটি প্রসেস করা হয়। এটি মূলত SelectionKey দ্বারা চ্যানেলগুলির ইভেন্ট পরিচালনা করে।

Selector এর কাজটি নিম্নলিখিত পর্যায়ে বিভক্ত:

১. চ্যানেল রেজিস্ট্রেশন (Channel Registration)

প্রথমে, আপনি একটি Selector তৈরি করবেন এবং এক বা একাধিক Channel কে এই Selector এর কাছে রেজিস্টার করবেন। প্রতিটি চ্যানেলের জন্য নির্দিষ্ট I/O অপারেশন (যেমন READ, WRITE, ACCEPT) রেজিস্টার করতে হবে।

Selector selector = Selector.open();  // Create a new selector

SocketChannel channel = SocketChannel.open(new InetSocketAddress("localhost", 8080));
channel.configureBlocking(false); // Non-blocking mode
channel.register(selector, SelectionKey.OP_READ);  // Register channel for read operation

২. SelectionKey (সিলেকশন কী)

যতবার একটি চ্যানেল Selector-এর সাথে রেজিস্টার করা হয়, ততবার একটি SelectionKey তৈরি হয়। এই কীটি চ্যানেলের রেজিস্টার করা অপারেশন এবং তার স্টেট ট্র্যাক করতে ব্যবহৃত হয়।

৩. Selector এ সিলেক্ট করা (Select)

আপনি Selector এর select() মেথড ব্যবহার করে চ্যানেলগুলিতে রেডি অপারেশন চেক করতে পারেন। এটি ব্লকিংভাবে কাজ করে এবং যখন কোন চ্যানেল I/O অপারেশন করতে প্রস্তুত হয়, তখন এটি ওই চ্যানেলটি নির্বাচন করে। এটি non-blocking I/O অ্যাপ্লিকেশন তৈরি করতে সহায়ক।

int readyChannels = selector.select();  // Blocks until at least one channel is ready

৪. Ready Channels Process করা (Process Ready Channels)

যখন একটি চ্যানেল প্রস্তুত থাকে, তখন আপনি SelectionKey থেকে এটি বের করে নির্দিষ্ট কাজটি সম্পাদন করতে পারেন (যেমন, রিড বা রাইট)। এই পদ্ধতিতে শুধুমাত্র প্রস্তুত চ্যানেলগুলির উপর কাজ করা হয়, যা পদ্ধতির পারফরম্যান্স উন্নত করে।

Set<SelectionKey> selectedKeys = selector.selectedKeys();
Iterator<SelectionKey> keyIterator = selectedKeys.iterator();

while (keyIterator.hasNext()) {
    SelectionKey key = keyIterator.next();
    keyIterator.remove();
    
    if (key.isReadable()) {
        // Process the channel for reading data
        SocketChannel readyChannel = (SocketChannel) key.channel();
        ByteBuffer buffer = ByteBuffer.allocate(1024);
        readyChannel.read(buffer);
    }
    // Similarly, handle other events like isWritable(), isAcceptable() etc.
}

৫. চ্যানেল থেকে ডাটা পাঠানো বা গ্রহণ করা

যখন আপনি একটি চ্যানেল সিলেক্ট করেন এবং এটি READ বা WRITE অপারেশন করা সক্ষম হয়, তখন আপনি সেই চ্যানেলের উপর নির্দিষ্ট কাজ যেমন ডেটা পাঠানো বা গ্রহণ করা পরিচালনা করতে পারেন।


Selector এর সুবিধা

  1. একাধিক চ্যানেল পরিচালনা: একাধিক চ্যানেল থেকে ইনপুট/আউটপুট অপারেশন পরিচালনা করতে একক থ্রেড ব্যবহার করা যায়, যা স্কেলেবিলিটি বাড়ায়।
  2. পারফরম্যান্স উন্নতি: নন-ব্লকিং I/O অপারেশনগুলির মাধ্যমে আপনি শুধুমাত্র প্রস্তুত চ্যানেলগুলির সাথে কাজ করবেন, যা রিসোর্সের অপচয় কমায়।
  3. উচ্চ দক্ষতা: Selector ব্যাবহার করে একাধিক I/O অপারেশন নির্দিষ্ট থ্রেডের মাধ্যমে সম্পাদন করা যায়, যা অ্যাপ্লিকেশনের দক্ষতা বাড়ায়।

Selector Java NIO এর একটি অত্যন্ত গুরুত্বপূর্ণ অংশ, যা একাধিক চ্যানেল থেকে I/O অপারেশন পরিচালনা করতে সাহায্য করে। এটি non-blocking I/O এর সুবিধা ব্যবহার করে এবং একাধিক চ্যানেলকে একটি থ্রেড দিয়ে প্রক্রিয়া করার জন্য তৈরি। Selector এর মাধ্যমে আপনি উচ্চ পারফরম্যান্স এবং স্কেলেবল I/O অপারেশন সম্পাদন করতে পারবেন, যা বৃহৎ এবং মাল্টি-কনেকশন ভিত্তিক অ্যাপ্লিকেশনগুলির জন্য অত্যন্ত উপকারী।


Content added By
Promotion

Are you sure to start over?

Loading...