Konuyla ilgili uzman değilim, ancak yine de bir şans vereceğim.
GHC (Haskell derleyicisi) bir veya daha fazla HEC'e sahip olabilir (Haskell Yürütme Bağlamı, ayrıca kapak veya yetenek olarak da bilinir). Çalışma zamanı bayrağı +RTS -N <number>
veya setNumCapabilities
işleviyle, bu HEC'lerin program için kaç tane olduğunu tanımlamak mümkündür. Bir HEC bir işletim sistemi iş parçacığıdır. Çalışma zamanı zamanlayıcısı, Haskell hafif zincirleri HEC'ler arasında dağıtır.
forkOn
işleviyle, iş parçacığının hangi HEC üzerinde çalıştığını seçmek mümkündür. getNumCapabilities
, yeteneklerin sayısını (HEC) döndürür.
İş parçacığı geçişi, Haskell iş parçacığının başka bir HEC'ye geçirilebileceği anlamına gelir. Çalışma zamanı bayrağı +RTS -qm
, bu iş parçacığı geçişini devre dışı bırakır.
Belgeler yaklaşık forkOn
o
forkIO gibi devletler, ancak iş parçacığı çalışması gereken yetenek üzerinde belirtmenizi sağlar. ForkIO iş parçacığının aksine, forkOn tarafından oluşturulan bir iş parçacığı, tüm kullanım ömrü boyunca aynı özellikte kalır (forkIO iş parçacığı, programlama ilkesine göre yetenekler arasında geçiş yapabilir).
yüzden forkOn
ile o tek HEC seçmek mümkündür iplik koştu edilir.
bu parçacığı tarafından yapılan
Yabancı arama yapılabilmesi garanti edilmez belirten forkIO
karşılaştırıldığında herhangi bir OS iş parçacığı tarafından; Belirli bir işletim sistemi iş parçacığı tarafından yapılacak yabancı çağrılara gereksiniminiz varsa, bunun yerine forkOS kullanın. Şimdi
, forkOn
fonksiyonu ve +RTS -qm
(özürlü diş göç) Aynı mıdır? Muhtemelen değil. forkOn
kullanıcı ile Haskell iş parçacığının hangi HEC üzerinde çalıştığı açıkça seçilir (örneğin tüm Haskell iş parçacıklarının aynı HEC'ye yerleştirilmesi mümkündür). +RTS -qm
ve forkIO
ile Haskell ipler HECS arasında geçiş yok ama HEC forkIO
tarafından kökenli Haskell iplik biter bilerek yolu yoktur
Referanslar:.