IIC2233 / Syllabus-2023-1

75 stars 44 forks source link

Uso de Locks y item en pauta #503

Open SantiagoDLCB opened 1 year ago

SantiagoDLCB commented 1 year ago

Prerrequisitos

(Marcar colocando una X entre los corchetes los ítems que ya hiciste, así: "[X]")

Duda

Hola tengo una duda con la pauta porque hay un item en uso de sockets que dice: "Las aplicaciones pueden trabajar concurrentemente sin bloquearse por escuchar un socket" Lo que ocurre es que por lo que estuve viendo pickle no es 100% thread safe, entonces si por ejemplo implemento el bonus del tiempo y tengo un threads que le actualiza el tiempo constantemente al cliente y otro thread que actualiza el resto de eventos, entoces si es que dos threads llaman a pickle al mismo tiempo por algun motivo como que crashea. La solucion que encontre online consitia en el uso de locks de manera que el servidor solo pueda mandar un mensaje a la vez y por lo tanto los clientes puedan escuchar un solo mensaje a la vez, pero no se si eso me reduciria el puntaje en este item, o no se refiere a eso?

SantiagoDLCB commented 1 year ago

El error es pickle.UnpicklingError: unpickling stack underflow. Se que este error ya esta en otras issues pero cree esta porque no se si la solucion es valida dado la pauta

MelanyLillo commented 1 year ago

Hola!

Los profesores hablaron y llegaron a la siguiente resolución: no deben implementar lock en el tema de recibir, sino que solamente en las zonas criticas. En particular, pickle no es thread safe, entonces habría que usar lock cada vez que se serialice o deserialice un mensaje.

Avísame si se respondió tu duda🤗

SantiagoDLCB commented 1 year ago

Osea que si implemento un lock para el pickle como practicamente no se nota la diferencia en tiempo que eso porduce, entonces no habra problema?

SantiagoDLCB commented 1 year ago

No entiendo porque seria para recibir mensajes por que cuando uno hace recv lo hace sobre el socket del cliente en especifico que uno quiere escuchar, entonces no seria necesario. Ademas que si le pongo un lock al recv entonces los threads de escuchar clientes se vuelven inutiles porque solo podria escuchar a un cliente a la vez y mientras ese uno no mande un mensaje, el resto tampoco podra hacerlo. Por ejemplo si le pongo un lock al recv solo 1 cliente podria apretar el boton comenzar y el resto no

MelanyLillo commented 1 year ago

Hola! Acabo de actualizar la respuesta, gracias por hacernos ver ese error.