Node.js Asynchronous Programming

Node.js இல் அசிங்க்ரோனஸ் நிரலாக்கத்தின் சக்தியைக் கண்டறியவும்

அசிங்க்ரோனஸ் நிரலாக்கம் என்றால் என்ன?

Node.js இல், அசிங்க்ரோனஸ் செயல்பாடுகள் கோப்பு I/O அல்லது நெட்வொர்க் கோரிக்கைகள் போன்ற பணிகள் முடியும் வரை காத்திருக்கும் போது உங்கள் நிரல் மற்ற வேலைகளைச் செய்ய அனுமதிக்கின்றன.

இந்த தடையற்ற அணுகுமுறை Node.js ஆயிரக்கணக்கான ஒரேநேர இணைப்புகளை திறம்பட கையாள உதவுகிறது.

ஒத்திசைவு

முடியும் வரை செயல்பாட்டைத் தடுக்கிறது

புரிந்துகொள்வது எளிது

தாமதங்களை ஏற்படுத்தும்

readFileSync போன்ற செயல்பாடுகளைப் பயன்படுத்துகிறது

அசிங்க்ரோனஸ்

தடையற்ற செயல்பாடு

சிறந்த செயல்திறன்

கையாள்வது மிகவும் சிக்கலானது

கால்பேக்குகள், வாக்குறுதிகள் அல்லது async/await ஐப் பயன்படுத்துகிறது

ஒத்திசைவு vs அசிங்க்ரோனஸ்: எடுத்துக்காட்டுகள்

ஒத்திசைவு கோப்பு படித்தல்

const fs = require('fs');

console.log('1. Starting sync read...');
const data = fs.readFileSync('myfile.txt', 'utf8');
console.log('2. File contents:', data);
console.log('3. Done reading file');

வெளியீடு வரிசையாக இருக்கும்: 1 → 2 → 3 (ஒவ்வொரு படிக்கும் இடையில் தடுக்கிறது)

அசிங்க்ரோனஸ் கோப்பு படித்தல்

const fs = require('fs');

console.log('1. Starting async read...');
fs.readFile('myfile.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log('2. File contents:', data);
});

console.log('3. Done starting read operation');

வெளியீடு வரிசை: 1 → 3 → 2 (கோப்பு படிக்க முடியும் வரை காத்திருக்காது)

கால்பேக் நரகத்தைத் தவிர்த்தல்

பிரச்சனை: கூடு கட்டிய கால்பேக்குகள் (கால்பேக் நரகம்)

getUser(userId, (err, user) => {
  if (err) return handleError(err);
  getOrders(user.id, (err, orders) => {
    if (err) return handleError(err);
    processOrders(orders, (err) => {
      if (err) return handleError(err);
      console.log('All done!');
    });
  });
});

தீர்வு: வாக்குறுதிகளைப் பயன்படுத்தவும்

getUser(userId)
  .then(user => getOrders(user.id))
  .then(orders => processOrders(orders))
  .then(() => console.log('All done!'))
  .catch(handleError);

மேலும் சிறப்பாக: Async/Await

async function processUser(userId) {
  try {
    const user = await getUser(userId);
    const orders = await getOrders(user.id);
    await processOrders(orders);
    console.log('All done!');
  } catch (err) {
    handleError(err);
  }
}

நவீன அசிங்க்ரோனஸ் முறைகள்

1. வாக்குறுதிகள்

const fs = require('fs').promises;

console.log('1. Reading file...');
fs.readFile('myfile.txt', 'utf8')
  .then(data => {
    console.log('3. File content:', data);
  })
  .catch(err => console.error('Error:', err));

console.log('2. This runs before file is read!');

2. Async/Await (பரிந்துரைக்கப்படுகிறது)

async function readFiles() {
  try {
    console.log('1. Starting to read files...');
    const data1 = await fs.readFile('file1.txt', 'utf8');
    const data2 = await fs.readFile('file2.txt', 'utf8');
    console.log('2. Files read successfully!');
    return { data1, data2 };
  } catch (error) {
    console.error('Error reading files:', error);
  }
}

சிறந்த நடைமுறைகள்

இதைச் செய்யுங்கள்

// Use async/await for better readability
async function getUserData(userId) {
  try {
    const user = await User.findById(userId);
    const orders = await Order.find({ userId });
    return { user, orders };
  } catch (error) {
    console.error('Failed to fetch user data:', error);
    throw error; // Re-throw or handle appropriately
  }
}

இதைச் செய்யாதீர்கள்

// Nested callbacks are hard to read and maintain
User.findById(userId, (err, user) => {
  if (err) return console.error(err);
  Order.find({ userId }, (err, orders) => {
    if (err) return console.error(err);
    // Process orders...
  });
});

💡 முக்கிய குறிப்புகள்:

  • சிறந்த வாசிப்புக்காக async/await ஐப் பயன்படுத்தவும்
  • எப்போதும் try/catch உடன் பிழைகளைக் கையாளவும்
  • Promise.all உடன் சுயாதீன செயல்பாடுகளை இணையாக இயக்கவும்
  • ஒத்திசைவு மற்றும் அசிங்க்ரோனஸ் குறியீடு முறைகளை கலக்க வேண்டாம்
  • வாக்குறுதிகளை await செய்ய மறக்காதீர்கள்

இணையான செயல்பாடு

எடுத்துக்காட்டு: இணையான செயல்பாடு

// Run multiple async operations in parallel
async function fetchAllData() {
  try {
    const [users, products, orders] = await Promise.all([
      User.find(),
      Product.find(),
      Order.find()
    ]);
    return { users, products, orders };
  } catch (error) {
    console.error('Error fetching data:', error);
    throw error;
  }
}

Promise.all பல அசிங்க்ரோனஸ் செயல்பாடுகளை ஒரே நேரத்தில் இயக்க உதவுகிறது, இது செயல்திறனை கணிசமாக மேம்படுத்துகிறது.

ஏன் அசிங்க்ரோனஸ் குறியீட்டைப் பயன்படுத்துவது?

அசிங்க்ரோனஸ் குறியீடு கோப்பு அல்லது தரவுத்தள அணுகல் போன்ற மெதுவான செயல்பாடுகளுக்காகக் காத்திருக்காமல் Node.js பல கோரிக்கைகளை ஒரே நேரத்தில் கையாள அனுமதிக்கிறது.

இது Node.js ஐ சேவையகங்கள் மற்றும் நிகழ்நேர பயன்பாடுகளுக்கு சிறந்ததாக்குகிறது.

அதிக செயல்திறன்

ஒரே நேரத்தில் பல கோரிக்கைகளை கையாள்கிறது

அளவிடக்கூடிய தன்மை

குறைந்த வளங்களுடன் அதிக இணைப்புகளை கையாளுகிறது

விரைவான பதிலளிப்பு

மெதுவான I/O செயல்பாடுகளுக்காக காத்திருக்காது

நிகழ்நேர பயன்பாடுகள்

அரட்டை, விளையாட்டுகள் மற்றும் ஒத்துழைப்பு கருவிகளுக்கு ஏற்றது

சுருக்கம்

Node.js இல் அசிங்க்ரோனஸ் நிரலாக்கம் தடையற்ற I/O க்கான ஒரு நிகழ்வு வளையத்தைப் பயன்படுத்துகிறது

நவீன அசிங்க்ரோனஸ் குறியீடு வாக்குறுதிகளுடன் async/await ஐப் பயன்படுத்துகிறது

எப்போதும் அசிங்க்ரோனஸ் செயல்பாடுகளில் பிழைகளைக் கையாளவும்

இணையான செயல்பாடுகளுக்கு Promise.all ஐப் பயன்படுத்தவும்

சரியான அசிங்க்ரோனஸ் முறைகளுடன் கால்பேக் நரகத்தைத் தவிர்க்கவும்

🚀 முக்கிய புள்ளிகள்:

  • Async/await வாசிப்புத்திறனை மேம்படுத்துகிறது
  • Promise.all இணையான செயல்பாட்டிற்கு உதவுகிறது
  • கால்பேக்குகளை விட வாக்குறுதிகள் சிறந்த கட்டமைப்பை வழங்குகின்றன
  • எப்போதும் பிழை கையாளுதலைச் செயல்படுத்தவும்
  • தடையற்ற I/O Node.js இன் முக்கிய பலம்

பயிற்சி

சரியான சொல்லை தேர்ந்தெடுக்கவும்.

Node.js I/O செயல்பாடுகளை கையாள ______ நிரலாக்க மாதிரியைப் பயன்படுத்துகிறது.

ஒத்திசைவு தடுப்பு
✗ தவறு! Node.js ஒத்திசைவு தடுப்பு மாதிரியைப் பயன்படுத்தாது
அசிங்க்ரோனஸ் தடையற்ற
✓ சரி! Node.js அசிங்க்ரோனஸ் தடையற்ற நிரலாக்க மாதிரியைப் பயன்படுத்துகிறது
பல-நூல் ஒத்திசைவு
✗ தவறு! Node.js ஒற்றை-நூல் மாதிரியைப் பயன்படுத்துகிறது, பல-நூல் அல்ல
செயல்முறை சார்ந்த
✗ தவறு! Node.js நிகழ்வு-ஆதாரமானது, செயல்முறை சார்ந்தது அல்ல