# Asysnc/Awake

{% embed url="<https://youtu.be/-0kcJv0Twbo?t=458>" %}

Windows da senkron çalışma, thread lerin kernelden sonuç beklemesi ve boşa RAM harcamasına sebep olur. Bloklama işlemi ilgili hardware donanımında yapılır. İşletim sistemi bir şey yapmıyor. Thread sadece bekliyor. Gelen cevap Windows üzerinden thread bilgi verir. Yeni istekler için yeni thread açacak bir yapı kurulması gerekir.

IRP: Input/Output Request Packet

![](https://3187200845-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M04QMjGnIjhYkjL9osd%2F-M3pACRj8L0c2JCZjP_B%2F-M3pWPKYlAVl1RcRM5rW%2Fimage.png?alt=media\&token=502235df-347c-4b0a-ac5f-376a0c742c8d)

Thread in gelen cevabı beklemesi yerine git başka işler yap diyebilirsiniz. Yani işlerinizi asenkron olarak halledebilirsiniz.

![](https://3187200845-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M04QMjGnIjhYkjL9osd%2F-M3pACRj8L0c2JCZjP_B%2F-M3pWWZN-zKU-CEOKcyj%2Fimage.png?alt=media\&token=03c617ff-73a3-46c5-8216-09172f8a977d)

Örneğin, ReadAsync() diyince otomatik olarak bir task objesi oluşturuluyor ve iş ile alakalı bilgiler içerisine yerleştiriliyor. Windows senkrondaki gibi gerekli IRP isteğini ilgili donanıma gönderiyor. Ancak thread iniz thread poll geri dönüyor.&#x20;

Peki yanıt oluştuğunda nasıl kaldığımız yerden devam ediyoruz?

Burada bazı protokoller var. Bazı portlar açılıyor. Windows bu portları kullanarak işin kimden geldiğini iş bittikten sonra kimin haberdar edileceğini biliyor. Yani uygulamanızı yeniden çağırabiliyor. Thread poll' a tekrar iş konuyor ve çalışması için bekliyor olacaktır. Extra thread oluşturmadan işlerimizi halledebiliyoruz. Event mekanizması kullanarak async programlama yapmış oluyoruz.

Sonuç olarak thread iniz bloklanmıyor. Yeni thread oluşturmak zorunda kalmayabiliyorsunuz. Tabiki iş yoğunluğuna göre thread sayısı artabilir.

Javascript mantığı da bu şekildedir.

Goland de async yok. Onun yerine channel (concurrency)var. Goland de go rutinleri var. Alt yapılarında thread kullanılıyor. Ancak go rutinleri co-operative yani işi bittikten sonra kullandığı threadi bırakıyor. Bunun artı eksi yönleri var. İşler çok uzun sürmeye başlarsa thread çok fazla kullanılır ve diğer işlere zaman kalmaz. Bunun için timeout yapıları kurmuşlar. CPU üzeinde threadler time sharring yaparken golang de go rutinleri time sharing yapar.

![](https://3187200845-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M04QMjGnIjhYkjL9osd%2F-M3vcqc6pdAP1o2VFLDb%2F-M3vde9mccsJ-YwrCuEp%2Fimage.png?alt=media\&token=1512864c-741d-49f2-b639-46cfc8915296)

Go rutinlerinin bir artısı da düşük kaynak tüketimiyle başlarlar gerektikçe kaynak alırlar. Bu da çok hızlı bir şekilde çok fazla sayıda oluşturulabilmeleri sağlanır.

{% embed url="<https://medium.com/@atarikguney/asenkron-asynchronous-programlama-nedir-296230121f9d>" %}

## Diğer

{% embed url="<https://gokhansengun.com/mvc-web-api-async-sync-action-karsilastirmasi/>" %}

{% embed url="<https://channel9.msdn.com/Events/TechDays/Techdays-2012-the-Netherlands/2287>" %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kurumahmut.gitbook.io/genel/yazilim-teknolojiileri/asysnc-awake.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
