mi verimli bir zaman aşımı içinSpinWait vs Uyku bekliyor. Hangisini Kullanmalı?
SpinWait.SpinUntil(() => myPredicate(), 10000)
için 10000ms
veya
o SleepWait
aşağıdaki çizgisinde örnek şey için aynı durumda için Thread.Sleep
yoklama kullanmak daha verimli mi işlevi:
public bool SleepWait(int timeOut)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
while (!myPredicate() && stopwatch.ElapsedMilliseconds < timeOut)
{
Thread.Sleep(50)
}
return myPredicate()
}
Eğer 1sec üzerinde zaman aşımları hakkında konuşuyorsak, SpinWait'in tüm verimliliğinin iyi bir kullanım şekli olmayabileceğini gösterdi? Bu geçerli bir varsayım mı?
Hangi yaklaşımı tercih edersiniz ve neden? Daha da iyi bir yaklaşım var mı?
Güncelleme - daha spesifik olmak:
önünde bulundurarak sınırlı kapasiteye ulaştığında BlockingCollection uyuyan bir iplik Pulse yapmak için bir yolu var mı? Marc Gravel'in önerdiği gibi, meşgul olmaktan kaçınmayı tercih ederim.
Teşekkürler, cevabınızı beğendim, bu gerçekten güzel olurdu. Bazı kaynakların bir BlockingCollection aracılığıyla kullanımını izlediğinizi varsayalım. Yeniden kullanılırlar ve tekrar kullanıma hazır olduklarında koleksiyona geri dönerler. Bir kapatma, yalnızca bunların tümü koleksiyona geri döndüğünde gerçekleşebilir. Yoğun bir bekleyiş dışında bir kapamanın devam edebileceğini (yani koleksiyonun tekrar dolduğunu) bildirmek nasıl olur? – Anastasiosyal
@Anastasiosyal Koleksiyonunu kapsülleyecek ve sarıcının dolu olduğunda bir şeyler yapmasını sağlayacağım; aslında, bunun için muhtemelen bir 'Monitor' kullanıyorum (örnek ekleyeceğim) –
BlockingQueue öğesinden inen bir 'ObjectPool' sınıfının yıkıcısında, BlockingCollection öğesinden tüm nesneleri birer birer poplayın ve bunları atın. Bu C# olduğu için, atılan nesnelerin sayısı havuz derinliğine eşit olana kadar, nil) öğesine alınan referansı ayarlayın. Tüm havuzlanmış nesneler daha sonra elden çıkarıldı, böylece sıraya el koyabilir ve kapatma sırasına devam etmek için dtordan geri dönebilirsiniz. Yoklama/meşgul beklemesi gerekli değil! Süreye biraz zaman aşımı koymak isteyebilirsiniz, böylece sızan bir nesne bir istisna (ya da bir şey) artar. –