Makro Görevler ve Görev Kuyruğu
Zamanlayıcıların ve G/Ç işlemlerinin nasıl planlandığını anlayın.
Makro Görevler ve Görev Kuyruğu, CoddyKit'te ücretsiz bir JavaScript Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, JavaScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. JavaScript Academy kursu toplamda 4 dersten oluşur.
Makro Görev Nedir?
Makro görev (görev olarak da adlandırılır), mevcut senkron kod tamamlandıktan sonra daha sonra çalıştırılmak üzere zamanlanan iş birimidir. setTimeout geri çağrıları bunun klasik örneğidir.
Makro görevler, çağrı yığını boşalana kadar görev kuyruğunda bekler.
setTimeout İşi Erteler
setTimeout, daha sonra çalışacak bir geri çağrı kaydeder. Gecikme 0 olsa bile mevcut tüm senkron koddan sonra çalışır.
console.log('first');
setTimeout(() => console.log('third (timeout)'), 0);
console.log('second');Görev Kuyruğu
Bir zamanlayıcı çalıştığında geri çağrısı görev kuyruğuna yerleştirilir. Olay döngüsü, kuyruktan yalnızca çağrı yığını boşken bir görev alır, görevi tamamlanana kadar çalıştırır ve ardından yeniden kontrol eder.
console.log('sync start');
setTimeout(() => console.log('task 1'), 0);
setTimeout(() => console.log('task 2'), 0);
console.log('sync end');Görevler Kuyruğa Alınma Sırasıyla Çalışır
Aynı gecikmeye sahip görevler zamanlandıkları sırayla çalışır. Görev kuyruğu FIFO'dur: İlk Giren, İlk Çıkar.
setTimeout(() => console.log('A'), 0);
setTimeout(() => console.log('B'), 0);
setTimeout(() => console.log('C'), 0);
console.log('sync');Gecikme Kesin Değil, En Az Süredir
Verdiğiniz gecikme, geri çağrının çalışmaya uygun hâle gelmesinden önce geçmesi gereken en az süredir. Gerçek çalıştırma ancak yığın temizlendiğinde ve önceki görevler tamamlandığında gerçekleşir; bu nedenle daha geç olabilir.
setTimeout(() => console.log('100ms'), 100);
setTimeout(() => console.log('0ms'), 0);
console.log('synchronous runs first');Gecikmeye Göre Sıralama
Farklı gecikmeler sıralamayı değiştirir: Daha kısa gecikmeler daha erken uygun hâle gelir ve zamanlama sırasından bağımsız olarak genellikle daha uzun gecikmelilerden önce çalışır.
setTimeout(() => console.log('50'), 50);
setTimeout(() => console.log('10'), 10);
setTimeout(() => console.log('30'), 30);
console.log('start');Her Döngü Turunda Bir Görev
Olay döngüsü her turda tam olarak bir makro görev çalıştırır, ardından bir sonraki turdan önce diğer işleri gerçekleştirir. Bu, görevler arasında sistemin yanıt verebilir kalmasını sağlar.
console.log('1');
setTimeout(() => {
console.log('2');
setTimeout(() => console.log('4'), 0);
}, 0);
setTimeout(() => console.log('3'), 0);İç İçe Zamanlayıcılar Daha Sonra Kuyruğa Girer
Bir görev içinde zamanlanan zamanlayıcı, hâlihazırda bekleyen görevlerin arkasında kuyruğa katılır; bu nedenle daha sonraki bir döngü turunda çalışır.
setTimeout(() => {
console.log('outer');
setTimeout(() => console.log('inner nested'), 0);
}, 0);
setTimeout(() => console.log('sibling'), 0);setInterval de Makro Görevlerdir
setInterval, tekrarlanan bir makro görev zamanlar. Burada birkaç yineleme çalıştırıp çıktıyı sınırlı tutmak için clearInterval ile durduruyoruz.
let count = 0;
const id = setInterval(() => {
count++;
console.log('tick ' + count);
if (count === 3) clearInterval(id);
}, 10);
console.log('interval scheduled');Senkron Kod Her Zaman Önceliklidir
Gecikme ne kadar küçük olursa olsun her makro görev, mevcut çalıştırmadaki tüm senkron kodun arkasında bekler. Önce yığın boşalmalıdır.
setTimeout(() => console.log('macrotask'), 0);
for (let i = 1; i <= 3; i++) console.log('sync ' + i);
console.log('done sync');Makro Görevler Neden Önemlidir?
Makro görevler, yürütmeyi engellemeden işi ertelemenizi sağlar. Ağır bir işi zamanlanmış parçalara bölmek uygulamanın yanıt verebilir kalmasını sağlar. Ancak makro görevler en yüksek önceliğe sahip değildir: Mikro görevler (vaatler), sıradaki makro görevden önce çalışır; bunu bir sonraki derste göreceksiniz.
console.log('schedule');
setTimeout(() => console.log('runs after sync'), 0);
console.log('still sync');Hızlı Yoklama
setTimeout(cb, 0) geri çağrısı ne zaman çalışır?
Özet: Makro Görevler
Ertelenen işlerin nasıl zamanlandığını öğrendiniz:
- Makro görevler (setTimeout, setInterval), görev kuyruğunda bekler.
- Kuyruk FIFO'dur; olay döngüsü her turda bir görev çalıştırır.
- Gecikme en az süredir ve senkron kod her zaman önce çalışır.
- Mikro görevlerin önceliği daha yüksektir; bunu bir sonraki derste inceleyeceksiniz.
Sıkça Sorulan Sorular
“Makro Görevler ve Görev Kuyruğu” dersi ücretsiz mi?
Evet — “Makro Görevler ve Görev Kuyruğu” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve JavaScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. JavaScript Academy kursu toplamda 4 dersten oluşur.
“Makro Görevler ve Görev Kuyruğu” dersinde ne öğreneceğim?
Zamanlayıcıların ve G/Ç işlemlerinin nasıl planlandığını anlayın. JavaScript Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
JavaScript Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te JavaScript Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Makro Görevler ve Görev Kuyruğu” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu JavaScript Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her JavaScript Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Çağrı Yığını
- Makro Görevler ve Görev Kuyruğu
- Mikro Görevlar ve Promise'ler
- queueMicrotask ve Sıralama