Node.js'in Asenkron Yapısı ====== GiriÅ bölümümüzde Node.js'in bize saÄlamıŠolduÄu Javascript çalıÅma ortamı yapısı üzerine konuÅtuk. Bu bölümde ise ana konumuz asenkron Javascript ve asenkron çalıÅmanın Node.js açısından önemi. Ãnce senkron ve asenkron kavramlarına bakalım. ## Senkron Programlama (Synchronous Programming): Senkron programlama en basit tanımıyla iÅlemlerin sırasıyla yapılmasıdır. Ãnce bir dosya okuyalım, sonra bir veritabanı iÅlemi yapalım ve sonrasında da bir http isteÄi gönderelim Åeklinde basit bir Åekilde çalıÅır. Beklemekten sıkılmaz, baÅka iÅlerin aciliyetiyle ilgilenmez. Bir iÅlem yapılırken diÄer iÅlemler **bloklanır**. ## Asenkron Programlama (Asynchronous Programming): Asenkron programlama ise uzun süren bir iÅlemi beklemeden diÄer iÅlemlere devam edebilmektir, iÅlemlerin sırasıyla devam etme zorunluluÄu yoktur. Ãnce bir dosya okuyalım, aaa ama bu dosya okumak uzun sürüyor, eee ne yapalım o zaman? Bu iÅlemin bitmesini beklemeden diÄer iÅleme geçebiliriz. Bir iÅlem yapılırken diÄer iÅlemler **bloklanmaz**.  Peki efendim! Bu tanımların Node.js açısından önemi tam olarak nedir? Ne demiÅtik öncesinde Javascript single thread, yani aynı anda sadece ve sadece tek bir iÅlem yapabilir. Yani tek bir çalıÅanımız var, bu çalıÅanın mümkün olduÄu kadar çok iÅ yapabilmesi için ne yapmamız gerekir? BoÅ bırakmamamız:))) Bir iÅlem baÅladıktan sonra beklemeden diÄer iÅlemleri de yapmasını bekleriz. Burada hemen Åu ufak eklemeyi de yapalım. EÄer beklediÄimiz uzun süreli iÅleme baÄımlı diÄer iÅlemler varsa bunların da beklenen iÅe ekleyebilmeliyiz. Asenkron programlamanın diÄer iÅlevi de budur. Burayı da anladık, ama hocam! Biz iÅlemleri tamam bir Åekilde bitmelerini beklemeden hızlıca baÅlattık, peki bu iÅlemler bittiÄinde bunun sıralaması nasıl yapılıyor? İÅte burada devreye event-loop girer. ## Olay Döngüsü (Event-Loop): Event-Loop, callback, single thread.. Nasıl hiçbir Åey anlamıyoruz deÄil mi? Ãzellikle aÅaÄıdaki grafiÄi açıklayayım hiç iÅleri zorlaÅtırmaya gerek yok. Restoran - garson metaforumuza tekrar döneceÄim burada. Restoranımız çalıÅma ortamı ve yalnızca tek bir garson çalıÅıyor (**Single Thread**) bu garsonumuz önce 1. masaya ait sipariÅleri aldı ve sipariÅi mutfaÄa bildirdi (**Thread Pool**). O sipariÅlerin hazır olmasını beklemeden (**Non-Blocking**) 2. masaya ait sipariÅleri aldı ve yine mutfaÄa bildirdi. Bu sırada kendisine 1. masanın yemeÄinin hazır olduÄu bildirildi (**callback**).  İÅte bahsettiÄimiz Node.js'in asenkron yapısının özeti budur. Node.js için temel amaç mümkün olan en kısa sürede beklemeden fazla sayıda iÅlem yapmaktır. ## Daha Fazlası İçin - [Arin Yazılım - JavaScript KarmaÅası](https://www.youtube.com/watch?v=_kdRtcy43ik) - [Stackoverflow How Node.js Works](https://stackoverflow.com/questions/9497076/how-node-js-works)