Dinke je
u jednoj ranijoj temi spominjao
interesantan članak koji ti može pomoći kod asinhronih zahteva.
Što se tiče problema sa kašnjenjem izgleda da sam pogrešio - prikačio sam uz poruku programče koje pokazuje da sa povećanjem konekcija po ciklusu efikasnost raste.
Program simulira rad sa socketima u asinhronom i sekvencijalnom režimu koristeći se izvesnim matematičim aproksimacijama i prikazuje koliko je puta asinhroni režim brži od sekvencijalnog - dobijeni rezultati su
veoma interesantni.
Nemojte se iznenaditi time što je kod u Python-u
Kôd:
"""
Skripta za poredjenje brzine izmedju asinhronog i normalnog (sekvencijalnog) pristupa socketima
"""
__author__ = 'Petar Maric - http://www.petarmaric.com/'
UKUPNO_KONEKCIJA = 1000
KONEKCIJA_PO_CIKLUSU = 20
MIN_TRAJANJE = 1
MAX_TRAJANJE = 25
TIMEOUT_KONEKCIJE = 15
###########################################
# Ne bi valjalo da cackate ispod ove linije
###########################################
import random
DUZINE_TRAJANJA_KONEKCIJA = [ random.uniform(MIN_TRAJANJE, MAX_TRAJANJE) for i in xrange(0, UKUPNO_KONEKCIJA) ]
BROJ_CIKLUSA = int(UKUPNO_KONEKCIJA/KONEKCIJA_PO_CIKLUSU) + (UKUPNO_KONEKCIJA%KONEKCIJA_PO_CIKLUSU > 0)
def stvarno_trajanje(trajanje):
return min(trajanje, TIMEOUT_KONEKCIJE)
def trajanje_sekvencijalnih_zahteva():
return sum( map(stvarno_trajanje, DUZINE_TRAJANJA_KONEKCIJA) )
def trajanje_asinhronih_zahteva():
return sum( [ max( map(stvarno_trajanje, DUZINE_TRAJANJA_KONEKCIJA[ciklus*KONEKCIJA_PO_CIKLUSU:(ciklus+1)*KONEKCIJA_PO_CIKLUSU]) ) for ciklus in xrange(0, BROJ_CIKLUSA) ] )
efikasnost = trajanje_sekvencijalnih_zahteva() / trajanje_asinhronih_zahteva()
print "Asinhroni socketi su efikasniji od sekvencijalnih %.2f puta" % efikasnost