[Perl] FileHandles en Windows....
Alejandro G. Bedoya
nezumi@prodigy.net.mx
Fri, 05 Apr 2002 00:37:34 -0600
>La bronca no es el filehandle, sino que tu programa requiere cada ve=
z m=E1s
>espacio en memoria... Y -afortunadamente :)- no conozco los algoritm=
os de
>asignaci=F3n de memoria de Windows, as=ED como tampoco conozco el
>funcionamiento de su scheduler... Podr=EDa ser (aunque se me har=
=EDa idiota)
>que requiera cargar la im=E1gen completa de tu programa en memoria r=
eal para
>ejecutarlo, por lo que cada que tu programa entra y sale de contexto
>tendr=E1 que hacer grand=EDsimas transferencias... Puede que sea que=
el swap
>de Windows es un vil archivote dentro del filesystem, que se fragmen=
ta
>cual cualquier archivo, que tiene que pasar por varias capas inneces=
arias,
>mientras que en Unix es simplemente un volcado de la im=E1gen en mem=
oria.
Recuerda que el programa solamente se ejecuta una vez, pero pide =
tres
veces consecutivas el archivo. Adem=E1s, usando el while la tercera v=
ez tarda
igual que la primera y eso es muy raro...
>Si entre la l=EDnea 7 y 8 el OS decide cambiar el proceso e inicia u=
na nueva
>copia de este mismo programa, esta copia leer=E1 un contador vac=
=EDo, y cuando
>le toque escribir (tal vez despu=E9s de que la primera copia guarde =
que
>llevas 105334 visitas) va a grabar undef+1=3D1 visitas.
>Claro, este es un caso simple, y no demasiado dif=EDcil de evitar...=
Pero es
>una simple demostraci=F3n :)
Ese es el ejemplo cl=E1sico, pero se supone que el flock deberia =
de
solucionar eso. Que es lo que realmente hace el flock?? Ok. ya entend=
i, si
entre la linea 7(la que abre el archivo) y la 8(la que lo lockea) se =
ejecuta
el programa por otro lado, vale queso todo. Entonces es un fraude el =
flock,
porque deberia de estar implementado en el open como tercera opcion, =
o
flockearse antes del open, sino pa que $%$%"# te sirve?!
Donde he visto que funciona es en un sistema de rotacion de banne=
rs,
donde usa tranquilamente el flock(FILE,6), me imagino que el 6 es la =
suma
del LOCK_EX y LOCK_NB, y jala sin ningun problema con 3500 banners al
dia(aunque viendolo detenidamente ahorita, creo que tambien usa
semaforos)... yo uso flock(file,2), es la unica diferencia, es por es=
o que
se corrompe mi archivo???
Por otro lado, la unica forma que "se" implementar lo de los sema=
foros
es por medio de un archivo adicional, que indique que el archivo real=
esta
lockeado:
1.- Si existe el archivo datos.lock, esperate un segundo maximo 15...
2.- Crea el achivo datos.lock.
3.- Haz lo que quieras con el archivo datos.main
4.- Borra el archivo datos.lock
Pero tronaria si por alguna raz=F3n el sistema fallara en entre el 3 =
y 4,
quedando el lock permamente.... Que otro tipo de semaforo existe???
---
Sinceramente...
Alejandro G. Bedoya
InterAccion.COM Ponemos su Internet en Acci=F3n