Newsgroup: it.comp.os.linux.development
Titolo: Atomicità primitive

Le primitive di I/O (in particolare read, accept...) sono sempre eseguite in 
modo atomico ?
Mi spiego meglio: se ho diversi processi bloccati su una read ad uno stesso 
descrittore, quando arrivano i dati, sono sicuro che SOLTANTO UN PROCESSO 
si sblocca e legge quei dati ?
Se sě, vale la stessa regola anche nel caso della accept su un socket ?
Sempre in caso di risposta affermativa, n processi bloccati in accept su un 
socket, potrebbero essere un modello di server concorrente ?
Grazie mille...:)
-- 
LF

 un socket, potrebbero essere un modello di server concorrente ?
Sì, ma non sarebbe un modello molto flessibile. Ad esempio, non potresti 
ascoltare simultaneamente su più socket o controllare altre operazioni di 
I/O. Normalmente si utilizza una 'select'. A questo proposito, nota che se 
si hanno più processi/thread in 'select' sulla stessa socket, quando una 
connessione è disponibile, tutti i processi/thread vengono risvegliati e 
più di uno potrebbe uscire dalla 'select'. In questo caso, la successiva 
'accept' avrà successo in un solo processo/thread, e fallirà negli altri.
Suggerisco la lettura del capitoletto 'accept Serialization - multiple 
sockets' nelle Apache Performance Notes:
 
 
http://httpd.apache.org/docs/misc/perf-tuning.html
Max

 'accept' avrà successo in un solo processo/thread, e fallirà negli altri.
Precisazione: la 'accept' fallirà negli altri processi soltanto il socket è 
non-blocking. Diversamente, resterà bloccata finchè non ci sarà una 
connessione in attesa.
Max 

 č non-blocking.
... soltanto SE il socket ...

   
http://httpd.apache.org/docs/misc/perf-tuning.html
Molto interessante...
Grazie di tutto !!
-- 
LF

 socket, potrebbero essere un modello di server concorrente ?
Non ho capito la domanda...
NP: Within Temptation - Our Farewell
-- 
  Giuseppe "Cowo" Corbelli \/\ My software: 
http://cowo.yoda2000.net
    **ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail**
  -<! Battles Are Fought By Those With The Courage To Believe !>-
  		Manowar - Courage

 
Sempre a proposito di strategie per l'implementazione di server 
"concorrenti" (event-based o threaded), suggerisco:
 
http://www.kegel.com/c10k.html
 
Max

 Non ho capito la domanda...
Vale a dire:
- listen() di un socket (TCP) su una porta locale
- fork() di n processi
- ogni processo esegue accept() sul socket; quando arriva una connessione 
uno dei processi liberi (cioč non occcupati a gestire altre connessioni, e 
quindi bloccati in accept()) ritorna dalla accept() e gestisce la 
connessione.
Che ne pensi ?
-- 
LF

 Che ne pensi ?
Penso che non ho mai programmato un server quindi la mia opinione vale poco
assai. In generale si parla di concorrenza quando si ha accesso multiplo a
risorse condivise. In questo caso l'unica cosa condivisa e' il socket, ma se
un solo processo ritorna dalla accept non c'e' alcun problema di
concorrenza. 
-- 
  Giuseppe "Cowo" Corbelli \/\ My software: 
http://cowo.yoda2000.net
    **ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail**
    -<! And the will shall return And again hearts shall burn
         All the horns now will sing Leading you back to the metal winds !>-
                  Lost Horizon - Sworn In The Metal Wind

 problema di concorrenza.
Infatti, dovrebbe funzionare... anche se dai documenti che ho letto ci sono 
problemi di performance per un numero di client (e quindi di processi) 
abbastanza elevato...
-- 
LF