தொகுதி பாடங்கள் (4/4)
சவால்: வாக்குறுதிகளுடன் திட்டமிடல்
"திட்டமிடல்" என்பது ஒத்திசைவு பணிகளின் பட்டியலை எவ்வாறு இயக்குவது என்பதை தீர்மானிப்பது: அனைத்தும் ஒன்றாக, ஒரு நேரத்தில்,
அல்லது சிறிய குழுக்களாக. நாங்கள் Promise.all, for await மற்றும் மூடல்களை இணைப்போம்.
இணையாக: அனைத்தும் ஒன்றாக
பணிகள் சுதந்திரமான வேகமானதாக இருக்கும்போது, அனைத்தையும் துவக்கி Promise.all உடன் காத்திருக்கவும்:
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]மெதுவான பணியின் மொத்த நேரம் ≈ நேரம்.
தொடரில்: ஒரு நேரத்தில்
ஒவ்வொரு பணியும் முந்தையதைச் சார்ந்தது அல்லது நீங்கள் வரம்பிட வேண்டும்:
async function inSerie(tasks) {
const risultati = [];
for (const t of tasks) {
risultati.push(await t());
}
return risultati;
}நேரங்களின் மொத்த நேரம் ≈ தொகை.
ஒத்திசைவு வரம்புடன்
சில நேரங்களில் நீங்கள் ஆயிரம் ஒரே நேரத்தில் கோரிக்கைகளை விரும்பவில்லை, ஆனால் அவர்களுக்காக காத்திருக்க விரும்பவில்லை தொடரில் ஒன்று: நீங்கள் விமானத்தில் அதிகபட்சம் N ஆக வேண்டும்.
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 "தொழிலாளர்களை" தொடங்குகிறீர்கள், அது எதுவும் மிச்சமில்லாத வரை அடுத்த குறியீட்டைப் பிடிக்கும்.
முயற்சி செய்து பாருங்கள்
`இன்சீரிஸ்(பணிகள்)` ஒத்திசைவை வரையறுக்கவும்: வாக்குறுதிகளை வழங்கும் செயல்பாடுகளின் வரிசையை வழங்கவும், அவற்றை ஒரு நேரத்தில் இயக்கவும் (காத்திருங்கள்) மற்றும் செயல்பாட்டின் வரிசையில் முடிவுகளின் வரிசையை வழங்கவும்.
குறிப்பைக் காட்டு
க்கான ... மற்றும் புஷ்(காத்திரு t())
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
மதிப்பாய்வு பயிற்சி
`இன்பேரலல்(பணிகள்)` ஒத்திசைவை வரையறுக்கவும்: வாக்குறுதிகளை வழங்கும் செயல்பாடுகளின் வரிசையைக் கொடுக்கவும், அவை அனைத்தையும் இணையாகத் தொடங்கவும் மற்றும் உள்ளீட்டின் அதே வரிசையில் முடிவுகளின் வரிசையை வழங்கவும். Promise.all ஐப் பயன்படுத்தவும்.
குறிப்பைக் காட்டு
Promise.all(tasks.map((t) => t()))
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்