🗂
Single-threaded tillarSingle thread tillarda, kodlar ketma ket holatda run bo'ladi, ya'ni bir vaqting o'zida faqatgina bitta vazifa bajariladi va bu turdagi tillar ishlash uchun juda oson hisoblanadi.
Eng mashxur single-threaded tillardan biri bu
Javascript.
JS web browserda DOM, HTTP so'rovlar va shunga o'xshash vazifalarni bajaradi. Shuningdek,
non-blocking I/O va
asynchronous bo'lib ishlay oladi.
Javascript har doim Execution Context da ishlaydi.
Execution Context bu container hisoblanadi va hamma Javascript kodlar Context da bajariladi.
Execution Context ikkita qisimimga ega, memory va code.
* Memory qismi variable environment deb ham ataladi va yaratilgan hamma o'zgaruvchilar memory qismida yig'iladi.
* Code qismi Thread of Execution deb ham ataladi va u yerga run bo'ladigan code lar (bajariladigan vazifalar) yig'iladi.
Javascript'da
Thread of Execution - Single hisoblanadi, ya'ni hamma bajariladigan kodlar bir qatorda ketma-ket joylashadi va o'sha tartibda run bo'ladi.
🖥 Misol:
let jasx = true;
setTimeout(() => {
jasx = false;
}, 1000);
while (jasx) {
console.log('salom', jasx);
}
Misolda jasx nomli o'zgaruvchi ochilyapti va default holatda
true qiymati berilyapti. O'zgaruvchi variable environment ga saqalanadi. Bu yerda 3 ta vazifa bor va ular ketma-ket call stack da yig'iladi.
Birinchi setTimeout()
call stack'ga tushadi va setTimeout asinxron funksiya bo'lgani uchun run qilmay turib
Javascript Engine bu funksiyani WebAPI ga jo'natadi. Ikkinchi
call stack ga while loop tushadi va sinxron funksiya bo'lgani uchun bajariladi.
WebAPI ga tushgan asinxron setTimeout funksiyaga sinxron funksiyalar ishga tushib call stack bo'shagandan keyin navbat keladi.
Ammo bir muommo bor, jasx o'zgaruvchi true qiymatda bo'lgani uchun while loop hech qachon bajarishdan to'xtamaydi, shuning uchun asinxron funksiyaga navbat kelmaydi va setTimeout ishlamaydi.
🔗 Havola:
*
https://dev.to/rajajaganathan/prove-that-javascript-runs-in-a-single-thread-1d7n#javascript #singleThreaded
💠
@JasXDev