Pogledajte određenu poruku
Staro 22. 01. 2007.   #4
Petar Marić
Python Ambassador
Master
 
Avatar Petar Marić
 
Datum učlanjenja: 06.06.2005
Lokacija: Novi Sad
Poruke: 602
Hvala: 28
27 "Hvala" u 17 poruka
Petar Marić će postati "faca" uskoro
Pošaljite ICQ poruku za Petar Marić
Lightbulb

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
__________________
Python Ambassador of Serbia
Petar Marić je offline   Odgovorite uz citat