ජාවාස්ක්රිප්ට් එක තනි තන්තුවක (single‑threaded) ක්රියා කරනවා කියලා හැමෝම දන්නවා. එහෙත් අපි බ්රවුසරයක් හෝ Node.js යෙදුමක් තුළ API ඇමතුම්, ටයිමර්, UI ක්ලික් වගේ වැඩ එකවර කළාම පේජ් එක අතුරුදන් වෙනවාද? නැහැ! ඒක සිදු කරන එක Event Loop සහ Concurrency Model එකයි.
මෙම මූලික සංකල්පය තේරුම් ගන්නේ කුමක්ද කියලා බලන්න. JavaScript එකේ Call Stack කියන ලිෆෝ (LIFO) ව්යුහයක් තියෙනවා. ප්රතික්රියාකාරී ක්රමයක් ඇරඹුනොත්, ඒක Stack එකට තල්ලු කරයි, වැඩේ අවසන් වුනාම ඒක ඉවත් වේ. මේක තනි තන්තුවක් නිසා එකවර එකම විධානයක් පමණක් ක්රියාත්මක වේ.
දැන් අපි Web APIs (browser) හෝ Node APIs (Node.js) ගැන කතා කරමු. Timer, fetch, file read වගේ කාලය ගතවන වැඩකාරීත්වයන් JavaScript එහිම කරන්නේ නැහැ. ඒවට පසුබැසී එවැනි වැඩකාරීත්වයන් බ්රවුසරය හෝ Node.js විසින් කරයි. ඒ අතර JavaScript තනි තන්තුවේ අනෙකුත් කේත පදනම ක්රියාත්මක කරගෙන යයි.
කාර්යය අවසන් වූ පසු, එහි callback එක Callback Queue (Macrotask Queue) හෝ Microtask Queue තුළ තබා Event Loop එකේ පසුකාලීනව පිරික්සයි. Event Loop එක Stack එක හිස් වූ විට Queue එකේ පළමු කාර්යය Stack එකට තල්ලු කරයි. මෙයින් setTimeout සහ Promise වගේ async ක්රියාකාරකම් එකටම පෙනෙනවා.
ශ්රී ලංකාවට ඇති වැදගත්කම
ශ්රී ලංකාවේ තරුණ සංවර්ධකයින්, විශ්වවිද්යාල සිසුන්, තාක්ෂණ ආරම්භකයන්ට මෙම සංකල්පය ඉගෙන ගැනීම අත්යවශ්යයි. ඒ හේතුව:
- Web, Mobile, Server‑side යෙදුම් ලියන විට Performance අඩු නොවීමට ඉඩ සලසයි.
- API ඇමතුම්, Real‑time UI updates, Video streaming වගේ වැඩකාරීත්වයන් ගැලපෙන ආකාරයෙන් ලියන්න හැකියාව ලැබේ.
- Node.js පදනම් කරගත් backend සේවාවන්හි Scalability වැඩි කරයි, ඒ නිසා ශ්රී ලංකාවේ IT සමාගම්ට ජාත්යන්තර තරඟකාරීත්වයක් ලැබේ.
ඒ නිසා JavaScript Event Loop සහ Concurrency Model පිළිබඳ මූලික දැනුම, දේශීය තාක්ෂණ ප්රවර්ධනයට, නව ආරම්භක ව්යාපාර සඳහා මූලික පදනමක් වේ.
අවසන් වශයෙන්, JavaScript එක තනි තන්තුවක් වුවත්, Event Loop මගින් අසින්ක්රෝනස් කාර්යයන් කළමනාකරණය කරයි. ඒ නිසා අපේ වෙබ් යෙදුම් හෝ සේවා අඩු ප්රතිචාරයක් නොදෙනුයේය. ඔබත් මේ සංකල්පය ඉගෙනගෙන, ඔබේ කේතය වඩාත් කාර්යක්ෂම කරගන්න.