Örneğin, iki farklı işlemci çekirdeği tarafından yürütülen iki farklı iş parçacığı kullanan bir program oluşturmak için çok çekirdekli bir işlemcideki iş parçacıklarıyla denemeler yapmak istiyorum.
Ancak, iş parçacıklarının farklı çekirdeklere hangi düzeyde tahsis edildiği net değil. Aşağıdaki senaryoları hayal edebilirim (işletim sistemine ve programlama dili uygulamasına bağlı olarak):
- İş parçacığı ayırma, işletim sistemi tarafından yönetilir. İş parçacıkları işletim sistemi sistem çağrıları kullanılarak oluşturulur ve işlem çok çekirdekli bir işlemcide çalışırsa, işletim sistemi otomatik olarak farklı çekirdeklerde farklı iş parçacıkları ayırmaya / zamanlamaya çalışır.
- İş parçacığı tahsisi programlama dili uygulaması tarafından yönetilir. İş parçacıklarını farklı çekirdeklere ayırmak özel sistem çağrıları gerektirir, ancak o dil için standart iş parçacığı uygulamasını kullandığımda programlama dili standart iş parçacığı kitaplıkları bunu otomatik olarak işler.
- İş parçacığı tahsisi açıkça programlanmalıdır. Programımda, kaç tane çekirdeğin bulunduğunu tespit etmek ve örneğin kütüphane işlevlerini kullanarak farklı çekirdeklere farklı iş parçacıkları tahsis etmek için açık kod yazmak zorundayım.
Soruyu daha spesifik hale getirmek için, çok iş parçacıklı uygulamamı Windows veya Linux'ta Java veya C ++ ile yazdığımı hayal edin. Uygulamam çok çekirdekli bir işlemci üzerinde çalışırken sihirli bir şekilde birden fazla çekirdek görecek ve kullanacak mı (çünkü her şey işletim sistemi veya standart iş parçacığı kütüphanesi tarafından yönetildiği için) veya birden fazla çekirdeğin farkında olmak için kodumu değiştirmem gerekiyor mu? ?