2016-06-21 110 views
6

Sadece forkOn kullanarak iş parçacığı oluşturan bir programım olduğunu varsayalım. Bu senaryoda, Haskell iş parçacığının farklı yetenekler arasında yük dengelemesi olmayacaktır. Yani bu programın +RTS -qm olmadan ve kullanılmadan bir farkı var mı?forkOn ve -qm RTS bayrağı arasındaki ilişki nedir?

Dokümantasyona göre, -qm, yalnızca forkOn'u kullanmanın benzer bir etkiye sahip olduğunu düşündüğüm iş parçacığı geçişini devre dışı bırakır. Bu varsayımı düzelttim mi? Belgelerin bu açıdan ne kadar net olduğu konusunda emin değilim.

cevap

4

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:.