Ciao a tutti.
Questo non è un vero e proprio problema di programmazione, però tento lo stesso a porvi la domanda per chiedervi consiglio.
Un server deve ricevere, via socket, un testo (che potrebbe essere di pochi caratteri o un documento molto grande). Lo deve poi scrivere su un file di testo. Il punto è che lavoro in ambiente multithread, perciò ho necessità di mettere un lock in scrittura sul file stesso.
Il client, con le sue write() invia dati in 'pacchetti' di una certa dimensione predefinita, e ovviamente il server entra in un ciclo di read() in cui accetta questi pacchetti fino alla fine.
Il problema nasce qui: sarebbe meglio scrivere ogni singolo pacchetto ricevuto sul file oppure bufferizzare tutti i pacchetti in arrivo e scrivere tutto alla fine?
Questi i contro:
-se scrivo su file ogni singolo pacchetto, ci fosse qualche ritardo di rete tengo il file lockato troppo a lungo, a discapito degli altri thread che invece potrebbero scrivere nel frattempo.
-se bufferizzo tutti i pacchetti fino alla fine, il testo inviato dal client potrebbe essere di notevoli dimensioni e quindi occupare parecchia memoria.
C'è una via di mezzo? Io avevo pensato di scrivere temporaneamente i 'pacchetti' su un file temporaneo, che poi "riverso" tutto in una volta sul file di interesse alla chiusura della comunicazione. Quanto è conveniente?