Thread
İş Parçacığı
- Okunuşu
- tred
Kısaca
Thread, işletim sisteminin zamanlayabileceği en küçük yürütme birimidir; bir process içinde çalışır ve o process'in belleğini diğer thread'lerle paylaşır.
Thread (iş parçacığı) nedir?
Thread, CPU'nun yürüttüğü tek bir komut dizisidir. Her process tek bir ana thread ile başlar ve bir program, bir dosya indirirken kullanıcı arayüzünü duyarlı tutmak gibi birkaç görevin aynı anda ilerleyebilmesi için daha fazla thread oluşturabilir.
Her thread'in kendi yığını (stack), program sayacı ve yazmaç değerleri vardır; ancak bir process'teki tüm thread'ler aynı heap belleğini, global değişkenleri ve açık dosyaları paylaşır. İşletim sistemi zamanlayıcısı thread'ler arasında geçiş yapar ve çok çekirdekli bir CPU'da birkaç thread gerçekten paralel çalışabilir. Thread'ler belleği paylaştığı için aynı veriyi aynı anda güncelleyen iki thread bir yarış durumuna (race condition) yol açabilir; bu yüzden programlar erişimi koordine etmek için kilitler, mutex'ler ve diğer senkronizasyon araçlarını kullanır.
Process'i paylaşımlı bir mutfak, thread'leri de orada çalışan aşçılar olarak düşünün. Aşçılar aynı buzdolabını ve tezgâhı paylaşır; bu iş birliğini hızlı kılar, ancak tek keskin bıçak için sırayla davranmaları gerekir yoksa birbirlerinin işine engel olurlar. Thread'ler çok sayıda isteği karşılayan web sunucularında, render'ı fizikten ayıran oyunlarda ve arka planda iş yapan uygulamalarda kullanılır.
Thread'ler çoğu zaman process'lerle ve asenkron kodla karıştırılır. Process'in kendi yalıtılmış belleği vardır, bir process içindeki thread'ler ise belleği paylaşır. Node.js'te olduğu gibi bir olay döngüsüyle (event loop) yapılan asenkron programlama, çok sayıda görevi paralel çalıştırmak yerine I/O için beklerlerken aralarında geçiş yaparak tek bir thread üzerinde idare edebilir.
Önemli noktalar
- Thread, bir process içinde yaşayan yürütme birimidir.
- Aynı process'teki thread'ler belleği paylaşır, ancak her birinin kendi yığını vardır.
- Birden fazla thread, çok çekirdekli bir CPU'da paralel çalışabilir.
- Paylaşımlı bellek yarış durumlarını mümkün kılar; bu yüzden kilit gibi senkronizasyon gerekir.
- Thread'ler oluşturması ve aralarında geçiş yapması process'lerden daha ucuzdur.
Örnek
import threading
def worker(name):
print(f"Thread {name} is running")
threads = [threading.Thread(target=worker, args=(i,)) for i in range(3)]
for t in threads:
t.start() # Begin running worker() in a new thread
for t in threads:
t.join() # Wait for each thread to finish
print("All threads done")Sık sorulan sorular
Multithreading (çoklu iş parçacığı) nedir?
Multithreading, tek bir programın görevleri eşzamanlı yürütmek için birden fazla thread kullanmasıdır. Duyarlılığı artırır ve çok çekirdekli CPU'larda işi hızlandırabilir, ancak yarış durumlarından ve deadlock'lardan kaçınmak için dikkat gerektirir.
Thread, process'ten daha hızlı mıdır?
Thread'ler bellek ve kaynakları paylaştığı için thread oluşturmak ve aralarında geçiş yapmak genellikle process'lere göre daha ucuzdur. Ancak process'ler daha güçlü yalıtım sunar; birinin çökmesi diğerlerini düşürmez.
Yarış durumu (race condition) nedir?
Yarış durumu, bir programın sonucunun paylaşılan veriye erişen thread'lerin öngörülemeyen zamanlamasına bağlı olması durumudur. Genellikle veriyi aynı anda yalnızca bir thread'in değiştirmesi için kilitler ya da atomik işlemlerle önlenir.
Sık karşılaştırılanlar
İlgili sayfalar
- Processİşletim Sistemleri, s. 23Process, bir programın çalışan örneğidir; işletim sistemi tarafından yönetilen kendi bellek alanına, kaynaklarına ve en az bir yürütme iş parçacığına sahiptir.
- EşzamanlılıkProgramlamanın Temelleri, s. 19Eşzamanlılık, bir programın birden çok görevde örtüşen zaman dilimlerinde ilerleyebilme yeteneğidir; örneğin birçok kullanıcıya aynı anda hizmet vermek gibi.
- Deadlockİşletim Sistemleri, s. 7Deadlock, iki ya da daha fazla thread veya process'in kaynakları bırakmaları için birbirini sonsuza dek beklediği ve hiçbirinin ilerleyemediği durumdur.
- CPU Zamanlamaİşletim Sistemleri, s. 5CPU zamanlama, işletim sisteminin her CPU çekirdeğinde hangi hazır process ya da thread'in ne kadar çalışacağına karar vermesidir; işlemci adil paylaşılır.
- Event LoopBackend ve API'ler, s. 12Event loop, olaylar ve I/O sonuçları hazır oldukça callback'leri tek tek çalıştırarak tek bir iş parçacığının birçok görevi yönetmesini sağlayan mekanizmadır.
- Async/AwaitProgramlamanın Temelleri, s. 2Async/await, asenkron kodu sıradan adım adım kod gibi okunur biçimde yazmayı sağlayan, her await'te bir promise ya da görev bitene dek duran sözdizimidir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin