DEV Community

ali
ali

Posted on

Node.js Event Loop

Herkese merhaba,
Bu ilk yazımda Javascript'i gerçekten anlamak isteyenlerin kafa yorduğu konulardan biri olan Event Loop(main loop, main thread, event thread,vb...) hakkında yazacağım. Şunuda eklemek istiyorum bu yazı profesyonel şekilde değil, kendim için aldığım notların bir derlemesi niteliğinde olacak. Hatalarım için şimdiden özür dilerim.
Aşağıdaki görselde nodejs içerisinde bulunan javascript v8 engine, event loop mekanizması ve libuv kütüphanesini görüyorsunuz. Javascript' in sağlayamadığı bir takım işleri yürüten libuv kütüphanesidir. Tarayıcıda javascript çalıştırırsak burada tarayıcıların sunduğu web api ile işleri yürütürüz.

Event loop bir mimari dizayn modelidir(architectural design pattern). Bu yaklaşımın tercih edilme sebebi javascriptin çalışma prensibiyle doğrudan alakalıdır. Javascript single threaded ve Non-Blocking I/O çalışır. Yani tek bir iş parçacığı üzerinde çalışmasına rağmen vakit alan işleri yürütürken bloklanmaz, çalışmaya devam eder. Bunu event loop mimarisiyle çözümler.

Program çalıştırıldığında Global Execution Context oluşturulur ve call stack'e eklenir. Bu program akışı tamamlanana kadar call stack'ten kaldırılmaz. Aslında her bir fonsksiyon için bir execution context oluşturulur. Fonksiyon işlevi tamamlandığında call stack'ten kaldırılır. Ama her zaman bu şekilde çalışmaz.

Bazı durumlarda fonksiyon işlevini tamamlaması zaman alır. Örneğin bir ağ isteği veya bir dosyadan veri okuma-yazma işlemi, DOM olayları (tamamı değil) gibi. Bu durumda fonksiyon thread pool veya Web API' lar tarafından işleme alınır. İşlem bittiğinda callback fonksiyonu callback queue (task queue) eklenir. Sırası geldiğinde(call stack boşaltıldığında) call stack'e aktarılır ve işlenir. İşlendikten sonra call stack'ten kaldırılır. Microtask queue' daki işler, callback queue' dakilerden önce işlenir. Bunlara örnek Promise, Mutation Observer, queueMicrotask

Node.js içinde thread pool, tarayıcılar içinde Web Workers asenkron işlemleri, yoğun CPU gücü gerektiren işleri yürütmek için kullanılır. Kullanımda ve kapsamlarında farklılıklarına burada değinmeyeceğim. Anlatmak istediğim şudur ki; javascript ile üstesinden gelemediğimiz işleri farklı mekanizmalar ile üstesinden gelebilir hale getiriyoruz.

Image description

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (0)

SurveyJS custom survey software

JavaScript UI Libraries for Surveys and Forms

SurveyJS lets you build a JSON-based form management system that integrates with any backend, giving you full control over your data and no user limits. Includes support for custom question types, skip logic, integrated CCS editor, PDF export, real-time analytics & more.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay