Benim kodunda çok performans kritik yerde geçerli çalışan iş parçacığı kimliği kullanmak için gidiyorum, bu yüzden bir yere bu kimliği önbelleğe ya da (pencereler için Unix benzeri sistemler için gettid
ve GetCurrentThreadId
) bir yöntemi çağırmak isteyip seçmeliyim her zaman almak için. Peki hangisi daha iyi? İş parçacığı kimliği sistem çağrısı alıyor mu?Geçerli iplik zamanının id alma işlemi pahalı mı?
cevap
Hayır, pahalı bir çağrı değildir. Bu bir sistem çağrısı ya da benzeri, ancak pahalı olandan uzak. Basit bir değişkendeki değeri önbelleğe alabilir eğer Açıkçası, o 10.
kat daha hızlı yapar Ama bütün performans ile ilgili sorgular gibi, bu karşılaştırma için aşağı gerçekten bu. Tek bir iş parçacığı kullanmak için işleri kolayca ayarlayabilirsiniz, iş parçacığı kimliğini almak için işlevi çağırın ve yapmak istediğiniz şeyi yapın. Bununla bir test yapmanın ne kadar sürdüğünü ölçün. Ardından, iş parçacığı kimliği için aramayı aynı aralıktaki sabit bir değerle değiştirin ve bunun nasıl çalıştığını görün.
En azından Windows'ta, GetCurrentThreadId()
oldukça ucuzdur ve sistem çağrısı içermez. Biraz kendi değişkendeki değeri önbelleğe için yarar değil, bir sürü olabilir
int GetCurrentThreadId() {
_asm {
mov eax, fs:[18h]
mov eax, [eax+24h]
}
}
: Temel olarak dışarı çalışır. Değişkeninizi diğer sık kullanılan değişkenler ile birlikte sakladığınızda, ana yararı muhtemelen (ve dolayısıyla önbellek kullanımını) artırabilir.
Yani, böyle sıkı bir döngü üzerinde çalışmadığınız sürece, bellek getirme (veya muhtemelen iki) ortadan kaldırma olasılığının önemli olduğunu, döndürdüğü değeri önbelleğe alarak çok fazla kazanma olasılığınız yoktur.
- 1. Çapraz iplik operasyonu geçerli değil
- 2. Geçerli işlemi değiştirin
- 3. Soket oluşturma-silme işlemi çok pahalı bir işlem midir?
- 4. Veritabanı bağlantılarını açık tutmak pahalı mı?
- 5. Crossthread işlemi geçerli değil ... - VB.NET
- 6. DataTable.Load() veri alma işlemi ExecuteReader()
- 7. Java'da Geri Alma İşlemi Prosedürü
- 8. TortoiseSVN'de bir işlemi geri alma
- 9. GCC’nin pahalı optimizasyonları nelerdir?
- 10. Bir iPod oynatıcı öğesine iTunes ID alma
- 11. Gç zamanının karmaşıklığı()
- 12. Geçerli URL'yi Android tarayıcıda alma
- 13. Geçerli URL adresinden #id elde ediliyor
- 14. iplik
- 15. Geçerli bir işlemle geçerli bir Java işlemi başlatılıyor
- 16. Geçerli konumdan div'un kimliğini alma
- 17. Kaydetme noktası geri alma işlemi mysql içinde
- 18. OracleConnection alma işlemi başlatıldı ancak boş
- 19. İplik zamanlamasını bozmaya yarayan araç mı?
- 20. Dosya erişim zamanının kaydını tutun
- 21. Bir işlemi geri alma işlemi tamamlanır ve bir çok işlemi nasıl geri alırsınız
- 22. IE7 ve IE8'de Tanımsız CSS Sınıfları mı Pahalı?
- 23. Magento'ya ödeme işlemi tamam mı?
- 24. Geçerli eylem ChildAction mı?
- 25. Bir powerpoint sunumunun geçerli yakınlaştırmasını alma
- 26. Geçerli yerel ayar için tarih biçimi alma
- 27. Geçerli kullanıcı için NetworkCredential (C#) alma
- 28. İplik nedir?
- 29. Kullanıcı, uygulama içi satın alma işlemi için ne zaman ücretlendirilir?
- 30. iplik numarası alınıyor
ben Unix gördük (ler) (mühim değil, fakat gs) aynı şeyi. Yani cevabınız çoklu platformlar için doğrudur. Çok ucuz. – boiler96