GPars (Groovy Parallel Systems) হল একটি Groovy ফ্রেমওয়ার্ক যা ডেভেলপারদের জন্য পার্লালেল প্রোগ্রামিং এবং অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং সহজ করে তোলে। GPars Groovy তে পার্লালেল কম্পিউটেশন এবং কনকারেন্সি (concurrency) নিয়ে কাজ করতে ব্যবহৃত হয়, যা বিশেষ করে মাল্টি-কোর প্রসেসরের সুবিধা নিয়ে আরও দ্রুত এবং কার্যকরী কোড তৈরি করতে সাহায্য করে।
GPars ফ্রেমওয়ার্ক Groovy এর ডাইনামিক এবং স্ক্রিপ্টিং ক্ষমতার সাথে একত্রিত হয়ে, পার্লালেল প্রোগ্রামিংকে আরও সহজ, পরিষ্কার এবং দ্রুত করে তোলে।
GPars হল একটি শক্তিশালী এবং কমপ্লেক্স ফিচারযুক্ত লাইব্রেরি যা পার্লালেল প্রোগ্রামিংয়ের জন্য ব্যবহৃত হয়। এটি Groovy তে মাল্টি-থ্রেডিং, অ্যাসিঙ্ক্রোনাস এবং কনকারেন্ট কার্যকারিতা সহজে এবং কার্যকরীভাবে বাস্তবায়ন করার জন্য ডিজাইন করা হয়েছে।
Groovy তে GPars ফ্রেমওয়ার্ক ব্যবহার করতে হলে, প্রথমে আপনি GPars লাইব্রেরিটি আপনার প্রকল্পে যুক্ত করতে হবে। এটি Groovy Grape বা Maven মাধ্যমে করা যেতে পারে।
Grape (Groovy Dependency Manager) ব্যবহার করে:
@Grab(group='org.codehaus.gpars', module='gpars', version='1.2.1')
Parallelism হল একটি প্রোগ্রামিং প্যাটার্ন যেখানে একটি কাজকে একাধিক অংশে বিভক্ত করে বিভিন্ন প্রসেসরে একসাথে কার্যকর করা হয়। Groovy তে GPars ব্যবহার করে আপনি সহজেই কোডে পার্লালেল কাজ সম্পন্ন করতে পারেন।
Groovy তে GPars Parallel Collections ব্যবহার করে আপনি একটি List, Set বা Map এর উপাদানগুলির উপর প্যারালাল অপারেশন করতে পারেন। এটি মূলত প্রতিটি উপাদানকে আলাদা থ্রেডে এক্সিকিউট করতে সাহায্য করে।
@Grab(group='org.codehaus.gpars', module='gpars', version='1.2.1')
import groovyx.gpars.GParsPool
def numbers = [1, 2, 3, 4, 5]
GParsPool.withPool {
def squares = numbers.collectParallel { it * it }
println squares
}
আউটপুট:
[1, 4, 9, 16, 25]
এখানে:
GParsPool.withPool
ব্লকের মধ্যে, আমরা collectParallel
মেথড ব্যবহার করেছি, যা প্যারালাল কম্পিউটেশনের মাধ্যমে প্রতিটি উপাদানকে স্কয়ার করে একটি নতুন লিস্ট তৈরি করেছে।Groovy তে GPars ব্যবহার করে আপনি লুপের মধ্যে প্যারালাল অপারেশন চালাতে পারেন।
@Grab(group='org.codehaus.gpars', module='gpars', version='1.2.1')
import groovyx.gpars.GParsPool
def numbers = [1, 2, 3, 4, 5]
GParsPool.withPool {
numbers.eachParallel { number ->
println "Number: $number, Thread: ${Thread.currentThread().name}"
}
}
আউটপুট:
Number: 1, Thread: pool-1-thread-1
Number: 2, Thread: pool-1-thread-2
Number: 3, Thread: pool-1-thread-3
Number: 4, Thread: pool-1-thread-4
Number: 5, Thread: pool-1-thread-5
এখানে:
eachParallel
মেথড ব্যবহার করা হয়েছে যেখানে প্রতিটি উপাদান আলাদা থ্রেডে প্রক্রিয়া করা হচ্ছে এবং প্রতিটি থ্রেডের নাম প্রিন্ট করা হচ্ছে।GPars Actors Model ব্যবহার করে আপনি সিস্টেমে একাধিক ছোট, স্বাধীন এবং অ্যাসিঙ্ক্রোনাস এক্সিকিউটিং ইউনিট তৈরি করতে পারেন। প্রতিটি অ্যাক্টর নিজের কাজ সম্পন্ন করার পরে অন্য অ্যাক্টরের সাথে যোগাযোগ করতে পারে।
import groovyx.gpars.actor.Actor
import groovyx.gpars.actor.DefaultActor
class MyActor extends DefaultActor {
@Override
void act() {
println "Hello from actor!"
}
}
def actor = new MyActor()
actor.start() // Start the actor to execute the act() method
actor.join() // Wait for actor to finish
এখানে:
act()
মেথডের মাধ্যমে একটি কাজ করবে এবং অন্যদের থেকে আলাদা ভাবে কার্যকর হবে।Futures এবং Promises অ্যাসিঙ্ক্রোনাস অপারেশনগুলি পরিচালনা করতে ব্যবহৃত হয়। Future একটি কমপ্লেক্স কাজের ফলাফল ভবিষ্যতে পাওয়ার জন্য ব্যবহৃত হয়, যখন Promise একটি অপারেশন সম্পন্ন হওয়ার প্রতিশ্রুতি দেয়।
import groovyx.gpars.GParsPool
import groovyx.gpars.dataflow.Dataflow
GParsPool.withPool {
def future = Dataflow.promise {
sleep(1000)
return "Result after 1 second"
}
println future.get() // Output: Result after 1 second
}
এখানে:
get()
মেথড ব্যবহার করে ফলাফল পাওয়া গেছে।GPars ফ্রেমওয়ার্কটি Groovy তে মাল্টি-কোর প্রসেসিং সুবিধা নিয়ে আরও দ্রুত এবং কার্যকরী কোড লেখার জন্য একটি শক্তিশালী টুল।
common.read_more