Web Development Atomicity, Visibility এবং Ordering গাইড ও নোট

252

Atomics API JavaScript-এ atomic operations পরিচালনা করার জন্য একটি শক্তিশালী টুল। এটি মাল্টি-থ্রেডেড প্রোগ্রামিংয়ের সময় atomicity, visibility, এবং ordering নিশ্চিত করে ডেটার সঠিকতা বজায় রাখে। এখানে প্রতিটি ধারণার বিস্তারিত ব্যাখ্যা দেওয়া হলো:


Atomicity (অবিভাজ্যতা)

Atomicity এমন একটি বৈশিষ্ট্য যা নিশ্চিত করে যে কোনো অপারেশন সম্পূর্ণ বা একেবারেই হয় না। একটি থ্রেড যখন একটি ডেটার উপর কাজ করছে, তখন অন্য কোনো থ্রেড সেই ডেটার উপর হস্তক্ষেপ করতে পারে না। এটি থ্রেড-সেফ অপারেশন নিশ্চিত করে।

উদাহরণ

const buffer = new SharedArrayBuffer(1024);
const typedArray = new Int32Array(buffer);

// Atomic add অপারেশন
Atomics.add(typedArray, 0, 5); // Index 0 এর মান 5 যোগ করে

console.log(Atomics.load(typedArray, 0)); // থ্রেড-সেফভাবে মান পড়া

ব্যাখ্যা:
এখানে Atomics.add() একটি atomic operation, যা নিশ্চিত করে যে অপারেশনটি চলাকালীন অন্য কোনো থ্রেড সেই ডেটায় হস্তক্ষেপ করতে পারবে না। এটি race condition প্রতিরোধ করে।


Visibility (দৃশ্যমানতা)

Visibility বোঝায় যে একটি থ্রেড দ্বারা করা পরিবর্তন অন্য থ্রেডের কাছে কবে এবং কীভাবে দৃশ্যমান হবে। Atomics ব্যবহার করলে নিশ্চিত করা যায় যে, একটি থ্রেডের দ্বারা করা ডেটা আপডেট অবিলম্বে অন্য থ্রেডের জন্য দৃশ্যমান হবে।

উদাহরণ

const buffer = new SharedArrayBuffer(1024);
const typedArray = new Int32Array(buffer);

// থ্রেড ১: ডেটা সেট করছে
Atomics.store(typedArray, 0, 42); // Index 0 এ মান 42 সেট

// থ্রেড ২: ডেটা পড়ছে
const value = Atomics.load(typedArray, 0); // থ্রেড ১ এর সেট করা মান পড়ে
console.log(value); // আউটপুট: 42

ব্যাখ্যা:
Atomics ব্যবহার করে একটি থ্রেডের পরিবর্তন অন্য থ্রেডে অবিলম্বে দৃশ্যমান হয়। Atomics.store() এবং Atomics.load() এর মাধ্যমে এই দৃশ্যমানতা বজায় থাকে।


Ordering (অর্ডারিং)

Ordering নিশ্চিত করে যে অপারেশনগুলো একটি পূর্বনির্ধারিত ক্রমে (order) সম্পন্ন হয়। মাল্টি-থ্রেডিংয়ে, অপারেশনগুলোর ক্রমে ভিন্নতা আসতে পারে, যা ডেটার অসঙ্গতি তৈরি করতে পারে। Atomics ব্যবহার করলে নিশ্চিত হয় যে অপারেশনগুলো ঠিক যে ক্রমে লেখা হয়েছে, সেই ক্রমেই কার্যকর হবে।

উদাহরণ

const buffer = new SharedArrayBuffer(1024);
const typedArray = new Int32Array(buffer);

// থ্রেড ১: ক্রমানুসারে কাজ করছে
Atomics.store(typedArray, 0, 1); // প্রথমে 1 সেট
Atomics.store(typedArray, 1, 2); // তারপর 2 সেট

// থ্রেড ২: ক্রমানুসারে মান পড়ছে
const first = Atomics.load(typedArray, 0);
const second = Atomics.load(typedArray, 1);

console.log(first, second); // আউটপুট: 1, 2

ব্যাখ্যা:
Atomics নিশ্চিত করে যে typedArray[0] এবং typedArray[1] এর মান যথাযথ ক্রমে লেখা ও পড়া হচ্ছে। এটি memory reordering প্রতিরোধ করে।


Atomics এর মাধ্যমে তিনটি বৈশিষ্ট্যের সংমিশ্রণ

  • Atomicity: অপারেশনগুলি বিভাজনযোগ্য নয়।
  • Visibility: একটি থ্রেডের পরিবর্তন অবিলম্বে অন্য থ্রেডে দৃশ্যমান।
  • Ordering: অপারেশনগুলি ঠিক যে ক্রমে লেখা হয়েছে, সেই ক্রমে কার্যকর হয়।

সমন্বিত উদাহরণ

const buffer = new SharedArrayBuffer(1024);
const typedArray = new Int32Array(buffer);

// থ্রেড ১: Atomic অপারেশন
Atomics.store(typedArray, 0, 10); // প্রথমে 10 সেট
Atomics.add(typedArray, 0, 5); // 10 এর সাথে 5 যোগ

// থ্রেড ২: Atomic পড়া
console.log(Atomics.load(typedArray, 0)); // আউটপুট: 15

Atomics এর গুরুত্ব

  1. Race Condition প্রতিরোধ: একাধিক থ্রেডে ডেটা কনসিস্টেন্সি বজায় রাখে।
  2. Thread Safety নিশ্চিত: অপারেশনগুলো থ্রেড-সেফ এবং ডেটা ক্ষতি এড়ায়।
  3. Memory Reordering প্রতিরোধ: সঠিক অর্ডার বজায় রাখে।
  4. Low-Level Synchronization: মাল্টি-থ্রেডেড পরিবেশে সিঙ্ক্রোনাইজেশনের জন্য কার্যকর।

Atomics এর এই তিনটি বৈশিষ্ট্য মাল্টি-থ্রেডিংয়ের জটিল চ্যালেঞ্জ সমাধানে অত্যন্ত কার্যকর।

Content added By
Promotion

Are you sure to start over?

Loading...