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

  • BigBoyTV

    BigBoyTV

    25 EYLÜL 2013
  • SRI International

    SRI Internat

    30 NİSAN 2008
  • steeletraining

    steeletraini

    28 NİSAN 2010