Programlamada çoklu çekirdek için işlemleri atamak mı gerekiyor?

Mucosoft

Megapat
Katılım
5 Mart 2014
Mesajlar
5.508
Makaleler
12
Çözümler
41
Bildiğiniz üzere bir uygulama geliştirirken tek çekirdek kullanıyor. Çoklu çekirdek kullanmak için bazı kodlar girmek gerekiyor. Peki tek işlem birden fazla çekirdeğe mi atanıyor yoksa her işlem için ayrı çekirdek mi kullanılıyor? Yani bu sistem tam olarak nasıl çalışıyor? Örneğin geliştirici 3 işlem yapacak ama tek çekirdek yerine 3 çekirdek kullanacak. Bu şekilde her işlemi çekirdeklere mi bölüyor?
 
Aslında bu biraz da kullandığınız programa bağlı bir değişken.
Kullandığınız program anlık yapılacak işleme göre sıra ataması yapıyor diye biliyorum.
Ayrı olarak yok bu tek çekirdekle yapılsın yok şu bütün çekirdekleri kullansın diye bir ayar bilmiyorum.
Tam olarak bilen varsa yazabilir benim bildiğim öyle bir şey yok.
 
Aslında bu biraz da kullandığınız programa bağlı bir değişken.
Kullandığınız program anlık yapılacak işleme göre sıra ataması yapıyor diye biliyorum.
Ayrı olarak yok bu tek çekirdekle yapılsın yok şu bütün çekirdekleri kullansın diye bir ayar bilmiyorum.
Tam olarak bilen varsa yazabilir benim bildiğim öyle bir şey yok.
Yazılım geliştirme amaçlı diyorum. Örneğin bir uygulama 4 işlem yani 4 kod yürütme birden yapmak istiyor. Eğer 2 çekirdek var ise aynı anda 2 işlem yapılır. 4 çekirdek var ise 4 işlem aynı anda yapılabilir. Bu doğru mu? Ayrıca tek işlemi 4 çekirdeğe bölmek mümkün mü?
 
Ben konuda bundan bahsetmiyorum ki, konuyu okumadan yorum yaptın veya konuyu anlamadın. Konuda kodlama ile ilgili bir şey yok. İstersen bir daha oku, anlamazsan belirtirsen detaylıca açıklarım.
"Çoklu çekirdek kullanmak için bazı kodlar girmek gerekiyor" kısmından yola çıkarak ben o kodu zaten yazdığını düşünüp o cevabı verdim. Yoksa bir iş otomatik olarak iş parçacıklarına (thread) parçalansaydı kaos çıkardı. Hoş manuel yapınca da kaos çıkabiliyor. (Race condition - Wikipedia)
 
Öncelikle sahip olduğunuz kafa karışıklığını giderelim. @TerabyteForever güzel bir noktaya parmak basmış ve kodların "multithreaded" olmasından bahsetmiş. Bu, çok "thread"li işlemler demektir. Siz bir kod yazarken kodu paralel parçalara bölmek isterseniz eğer kodu birden fazla thread çalıştıracak şekilde yazarsınız. Ancak bunu farklı işlemlere (process) bölerek de yapabilirsiniz. Örneğin Google mühendisleri Chrome'u tasarlarken karar aşamasında her tarayıcı penceresinin bir veya birkaç farklı threadde çalışması yerine yeni bir işlem açmasına karar vermişlerdi. Her pencere için yeni bir işlem açmanın bellekte ve diğer kaynaklarda bedeli daha fazla olsa bile Chrome'un daha sağlıklı çalışmasını sağlıyordu.

İşletim sistemi penceresine dönelim. Bir işletim sisteminin en temel görevi kaynak yönetimidir. Kaynak yönetiminin işlemleri ilgilendiren parçasına "process scheduling" denir. Windows bunu öncelik atamasıyla çalışacak şekilde preemptive olarak yapar. İşlemler, kodlarında yazıldığı gibi threadleri çağırır. Threadler ise varsayılan herhangi bir işlemci çekirdeği üzerinde çalışabilir ancak işletim sistemi bunu kısıtlayabilir. Örneğin Discord'u açarsınız, işletim sistemi Discord'un threadleri için sadece ilk 3 çekirdeği ayırır. Discord'a ayrılan işlemci kaynakları bu 3 çekirdekten verilir. Buna "process affinity" deniyor. Görev Yöneticisi açarak bunu kendiniz gözlemleyebilir ve ayarlayabilirsiniz.

2022-05-14 18_57_01-Task Manager.png

Burada Discord'un işlemi her çekirdekte çalışabilir şekilde işaretlenmiş.​

Scheduling işlemi gerçekten derya deniz bir işlem. Ancak her programcının bilmesi gereken bir konu. Daha fazla okuma yapmak için Microsoft'un kaynağını aşağı bırakıyorum.

 

Yeni konular

Geri
Yukarı