SORU
20 Mart 2009, Cuma


Ne'iyi bir oranı algoritması sınırlayıcı s?

Pseudo-code, veya daha iyi, Python kullanabilir miyim? Deniyorum konusunda hız sınırlayıcı sıra için bir Python IRC bot ve kısmen çalışır, ama eğer birisi tetikler daha az mesaj daha sınırı (örneğin, hız sınırı 5 mesaj başına 8 saniye, ve kişi tetikler sadece 4), ve önümüzdeki tetik üzerinde 8 saniye (örneğin, 16 saniye sonra), bot gönderdiği mesaj, ama sıra olur tam ve bot bekler 8 saniye bile değil gerekli beri 8 saniye süresi vardır geçmiş.

CEVAP
20 Mart 2009, Cuma


Eğer çok hızlı bir şekilde ulaştığında iletileri bırakmak istiyorsanız, burada basit bir algoritma, (yerine sıra keyfi büyük olsun, çünkü mantıklı olan, kuyruk):

rate = 5.0; // unit: messages
per  = 8.0; // unit: seconds
allowance = rate; // unit: messages
last_check = now(); // floating-point, e.g. usec accuracy. Unit: seconds

when (message_received):
  current = now();
  time_passed = current - last_check;
  last_check = current;
  allowance  = time_passed * (rate / per);
  if (allowance > rate):
    allowance = rate; // throttle
  if (allowance < 1.0):
    discard_message();
  else:
    forward_message();
    allowance -= 1.0;

Datastructures, zamanlayıcılar vb yok. ve temiz bir şekilde çalışıyor :) bu çözüm, bu, '' hızı en fazla saniyede 5/8 birim büyüyor, yani sekiz saniye başına en fazla beş adet. ödenek İletilen her mesaj her sekiz saniyede bir beş daha fazla mesaj gönderebilirsiniz. böylece bir birim fiyatından düşer.

rate bir tamsayı olması gerektiğini unutmayın, yani olmadan sıfır ondalık kısmı, ya da algoritma doğru (gerçek hızı rate/per olmayacak) işe yaramaz. E. g. rate=0.5; per=1.0; allowance asla 1.0 büyüyecek çünkü çalışmıyor. Ama rate=1.0; per=2.0; gayet iyi çalışıyor.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BenjiManTV

    BenjiManTV

    20 Mart 2011
  • listedabive

    listedabive

    30 Ocak 2007
  • Ordetta Price

    Ordetta Pric

    12 EYLÜL 2011