முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்
தொகுதி 8 · பாடம் 4 இன் 4பாடத்திட்டத்தில் 32/32~15 min
தொகுதி பாடங்கள் (4/4)

சவால்: வாக்குறுதிகளுடன் திட்டமிடல்

"திட்டமிடல்" என்பது ஒத்திசைவு பணிகளின் பட்டியலை எவ்வாறு இயக்குவது என்பதை தீர்மானிப்பது: அனைத்தும் ஒன்றாக, ஒரு நேரத்தில், அல்லது சிறிய குழுக்களாக. நாங்கள் Promise.all, for await மற்றும் மூடல்களை இணைப்போம்.

இணையாக: அனைத்தும் ஒன்றாக

பணிகள் சுதந்திரமான வேகமானதாக இருக்கும்போது, ​​அனைத்தையும் துவக்கி Promise.all உடன் காத்திருக்கவும்:

JS
async function inParallelo(tasks) {
  return Promise.all(tasks.map((t) => t()));
}

const risultati = await inParallelo([
  () => Promise.resolve(1),
  () => Promise.resolve(2),
  () => Promise.resolve(3),
]);
// [1, 2, 3]

மெதுவான பணியின் மொத்த நேரம் ≈ நேரம்.

தொடரில்: ஒரு நேரத்தில்

ஒவ்வொரு பணியும் முந்தையதைச் சார்ந்தது அல்லது நீங்கள் வரம்பிட வேண்டும்:

JS
async function inSerie(tasks) {
  const risultati = [];
  for (const t of tasks) {
    risultati.push(await t());
  }
  return risultati;
}

நேரங்களின் மொத்த நேரம் ≈ தொகை.

ஒத்திசைவு வரம்புடன்

சில நேரங்களில் நீங்கள் ஆயிரம் ஒரே நேரத்தில் கோரிக்கைகளை விரும்பவில்லை, ஆனால் அவர்களுக்காக காத்திருக்க விரும்பவில்லை தொடரில் ஒன்று: நீங்கள் விமானத்தில் அதிகபட்சம் N ஆக வேண்டும்.

JS
async function conLimite(tasks, n) {
  const risultati = new Array(tasks.length);
  let i = 0;
  async function worker() {
    while (i < tasks.length) {
      const mio = i++;
      risultati[mio] = await tasks[mio]();
    }
  }
  await Promise.all(Array.from({ length: n }, worker));
  return risultati;
}

யோசனை: நீங்கள் n "தொழிலாளர்களை" தொடங்குகிறீர்கள், அது எதுவும் மிச்சமில்லாத வரை அடுத்த குறியீட்டைப் பிடிக்கும்.

முயற்சி செய்து பாருங்கள்

உடற்பயிற்சி#js.m8.l4.e1
முயற்சிகள்: 0ஏற்றுகிறது…

`இன்சீரிஸ்(பணிகள்)` ஒத்திசைவை வரையறுக்கவும்: வாக்குறுதிகளை வழங்கும் செயல்பாடுகளின் வரிசையை வழங்கவும், அவற்றை ஒரு நேரத்தில் இயக்கவும் (காத்திருங்கள்) மற்றும் செயல்பாட்டின் வரிசையில் முடிவுகளின் வரிசையை வழங்கவும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

க்கான ... மற்றும் புஷ்(காத்திரு t())

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

மதிப்பாய்வு பயிற்சி

உடற்பயிற்சி#js.m8.l4.e2
முயற்சிகள்: 0ஏற்றுகிறது…

`இன்பேரலல்(பணிகள்)` ஒத்திசைவை வரையறுக்கவும்: வாக்குறுதிகளை வழங்கும் செயல்பாடுகளின் வரிசையைக் கொடுக்கவும், அவை அனைத்தையும் இணையாகத் தொடங்கவும் மற்றும் உள்ளீட்டின் அதே வரிசையில் முடிவுகளின் வரிசையை வழங்கவும். Promise.all ஐப் பயன்படுத்தவும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

Promise.all(tasks.map((t) => t()))

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்