Atomic Arrays হল JavaScript-এ Atomics API এবং SharedArrayBuffer এর সাথে ব্যবহৃত একটি বিশেষ কনসেপ্ট, যা মাল্টি-থ্রেডেড প্রোগ্রামিংয়ে অ্যারে ডেটা পরিচালনায় atomic operations নিশ্চিত করে। এটি TypedArray এর উপর ভিত্তি করে কাজ করে, যা SharedArrayBuffer এর মাধ্যমে মেমোরি শেয়ার করতে সক্ষম।
Atomic Arrays: Introduction
Atomic Arrays মূলত SharedArrayBuffer এর উপর ভিত্তি করে তৈরি করা TypedArray। এগুলোতে Atomics API ব্যবহার করে থ্রেড-সেফ অপারেশন সম্পাদন করা হয়। মাল্টি-থ্রেডিংয়ের সময় ডেটা ম্যানিপুলেশনে Race Condition এবং Data Corruption প্রতিরোধ করার জন্য এগুলো ব্যবহৃত হয়।
কেন Atomic Arrays প্রয়োজন?
- Thread-safe Data Management: একাধিক থ্রেড একসঙ্গে ডেটা পড়া এবং লেখা করতে পারে।
- Synchronization: থ্রেডগুলোর মধ্যে ডেটা সিঙ্ক্রোনাইজ করে।
- Performance Optimization: লক-মুক্ত (lock-free) প্রোগ্রামিংয়ের মাধ্যমে পারফরম্যান্স বৃদ্ধি করে।
- Data Integrity: ডেটা সঠিকভাবে আপডেট এবং পরিচালনা নিশ্চিত করে।
Atomic Arrays এর বৈশিষ্ট্য
- Thread-safety: একই সময়ে একাধিক থ্রেড ডেটার উপর কাজ করলেও ডেটার সঠিকতা বজায় থাকে।
- Atomic Operations: ডেটা পড়া, লেখা, এবং আপডেট করার জন্য নির্দিষ্ট মেথড।
- Shared Memory: SharedArrayBuffer ব্যবহার করে মেমোরি শেয়ার করা হয়।
- TypedArray Integration: Int8Array, Int16Array, Int32Array এর সাথে কাজ করে।
Atomic Arrays: কিভাবে কাজ করে?
Atomic Arrays এর অপারেশনগুলো Atomics API এর মাধ্যমে সম্পন্ন হয়। এটি সরাসরি TypedArray এর নির্দিষ্ট ইনডেক্সে কাজ করে এবং থ্রেড-সেফ অপারেশন নিশ্চিত করে।
স্টেপস:
- SharedArrayBuffer তৈরি করুন।
- TypedArray এর সাথে SharedArrayBuffer লিঙ্ক করুন।
- Atomics API ব্যবহার করে ডেটা পড়া বা আপডেট করুন।
Atomic Arrays এর ফাংশনসমূহ
১. Atomics.load(typedArray, index)
একটি নির্দিষ্ট ইনডেক্স থেকে ডেটা পড়ে।
const buffer = new SharedArrayBuffer(16); // 16-byte মেমোরি
const intArray = new Int32Array(buffer);
intArray[0] = 42;
const value = Atomics.load(intArray, 0);
console.log(value); // আউটপুট: 42
২. Atomics.store(typedArray, index, value)
নির্দিষ্ট ইনডেক্সে একটি ভ্যালু সেট করে।
Atomics.store(intArray, 1, 100);
console.log(intArray[1]); // আউটপুট: 100
৩. Atomics.add(typedArray, index, value)
নির্দিষ্ট ইনডেক্সে একটি মান যোগ করে এবং পূর্ববর্তী মান রিটার্ন করে।
const previous = Atomics.add(intArray, 1, 10);
console.log(previous); // আউটপুট: 100
console.log(intArray[1]); // আউটপুট: 110
৪. Atomics.sub(typedArray, index, value)
নির্দিষ্ট ইনডেক্স থেকে একটি মান বিয়োগ করে এবং পূর্ববর্তী মান রিটার্ন করে।
Atomics.sub(intArray, 1, 10);
console.log(intArray[1]); // আউটপুট: 100
৫. Atomics.compareExchange(typedArray, index, expected, replacement)
ইনডেক্সে যদি মান expected এর সমান হয়, তবে সেটি replacement দিয়ে প্রতিস্থাপন করে।
const result = Atomics.compareExchange(intArray, 1, 100, 200);
console.log(result); // আউটপুট: 100
console.log(intArray[1]); // আউটপুট: 200
৬. Atomics.wait(typedArray, index, value, timeout)
নির্দিষ্ট ইনডেক্সে একটি মান পরিবর্তনের জন্য অপেক্ষা করে।
Atomics.wait(intArray, 0, 42, 1000); // ১ সেকেন্ড অপেক্ষা করবে যদি মান ৪২ না হয়
৭. Atomics.notify(typedArray, index, count)
একটি নির্দিষ্ট সংখ্যা পর্যন্ত থ্রেডকে জাগিয়ে তোলে।
Atomics.notify(intArray, 0, 1); // একটি থ্রেডকে জাগিয়ে তোলে
Atomic Arrays এর ব্যবহার
উদাহরণ ১: মাল্টি-থ্রেডিংয়ে Atomic Arrays
const buffer = new SharedArrayBuffer(1024);
const intArray = new Int32Array(buffer);
// Worker 1
Atomics.store(intArray, 0, 50);
// Worker 2
Atomics.add(intArray, 0, 10);
// Main Thread
console.log(Atomics.load(intArray, 0)); // আউটপুট: 60
উদাহরণ ২: ডেটা আপডেট এবং সিঙ্ক্রোনাইজেশন
const buffer = new SharedArrayBuffer(1024);
const intArray = new Int32Array(buffer);
function increment() {
for (let i = 0; i < 1000; i++) {
Atomics.add(intArray, 0, 1);
}
}
increment();
console.log(Atomics.load(intArray, 0)); // আউটপুট: 1000
Atomic Arrays ব্যবহারের সুবিধা
- Thread-safe Operations: মাল্টি-থ্রেডিংয়ে ডেটা সঠিক রাখে।
- Performance: লক-মুক্ত (lock-free) অপারেশন নিশ্চিত করে।
- Data Consistency: একাধিক থ্রেড কাজ করলেও ডেটার সঠিকতা বজায় থাকে।
- Concurrency Management: থ্রেডগুলোর মধ্যে সিঙ্ক্রোনাইজেশন নিশ্চিত করে।
Atomic Arrays এর সীমাবদ্ধতা
- Complex API: নতুনদের জন্য এটি জটিল হতে পারে।
- Memory Limitation: SharedArrayBuffer এর সাইজ ফিক্সড থাকে।
- Browser Support: সব ব্রাউজারে সাপোর্ট নেই।
- Limited Data Types: শুধুমাত্র TypedArray এর সাথে কাজ করে।
Atomic Arrays মাল্টি-থ্রেডেড অ্যাপ্লিকেশনে ডেটা ম্যানেজমেন্ট এবং সিঙ্ক্রোনাইজেশনের জন্য একটি শক্তিশালী টুল। এটি Web Workers এর মাধ্যমে ডেটা শেয়ারিং এবং ডেটার উপর নির্ভরযোগ্য অপারেশন নিশ্চিত করে।