Sobes.tech
Middle

Окуялар циклі (event loop) жөнүндө мага айтып бер.

sobes.tech AI

AIден жооп

Окуялар цикли — JavaScriptте асинхрондуу иштин негизи. Ал коддун аткарылышын, окуяларды иштетүүнү жана тышкы дүйнө менен өз ара аракеттенүүнү көзөмөлдөйт.

Негизги компоненттер:

  • Heap (Heap): Объекттерди бөлүштүрүү үчүн эс тутум аймагы.
  • Stack (Stack): Функциялардын аткаруу контексттери сакталуучу жер. Функция чакырылганда, ал stackке жайгаштырылат, жана аяктагандан кийин ал алынып салынат.
  • Web API: Браузер тарабынан берилген интерфейстер (DOM, AJAX, Timers жана башка). Алар асинхрондуу операцияларды иштетет.
  • Callback Queue (Callback кезеги): Окуяларга байланыштуу билдирүүлөрдүн кезеги. Web API бул жерде аяктагандан кийин callbackтерди жайгаштырат.
  • Окуялар цикли (Event Loop): Үзгүлтүксүз stack жана callback кезегин көзөмөлдөйт. Эгер stack бош болсо, ал биринчи callbackти алып, аны аткаруу үчүн stackке жайгаштырат.

Процесс:

  1. Синхрондук код stackте аткарылат.
  2. Асинхрондуу операциялар (setTimeout, fetch) Web APIлерге жөнөтүлөт.
  3. Асинхрондуу операция аяктагандан кийин, анын callbackи callback кезегине коюлат.
  4. Окуялар цикли stack бошотулушун күтөт.
  5. Stack бош болсо, цикли биринчи callbackти алып, аны stackке жайгаштырат, ал жерде аткарылат.

Мисал менен setTimeout:

console.log('Баштоо');

setTimeout(() => {
  console.log('setTimeout ичинде');
}, 0);

console.log('Аяктоо');

Жыйынтык:

Баштоо
Аяктоо
setTimeout ичинде

0 мс убакыт менен тайм-аут болсо да, setTimeout callbackи синхрондук коддон кийин аткарылат, анткени ал кезекке түшүп, stack бошотулушун күтөт.

Node.jsте дагы бир окуялар цикли бар, бирок кезектердин иштөө фазаларында кээ бир айырмачылыктар менен.