Ciao a tutti, devo scrivere il codice di un server. Il server è un pool di thread avente un listener single thread che accetta le richieste dai client e workers multi-thread che accettano al massimo una delle n operazioni che devono svolgere i client. Dovrei usare la funzione select o la pselect (per avere una gestione migliore dei segnali) per il controllo dei descrittori pronti. Ho letto molto sulla select ma non riesco bene a capire come implementare il tutto e ho qualche dubbio sul corretto utilizzo di questa funzione. L'idea che mi sono fatto è: I client vegono creati e fanno la richiesta di connessione al listener. Il listener prende l'fd del client e lo inserisce nel set della select. Ogni volta che un client ha qualcosa da scrivere o da leggere la select me lo notifica e a quel punto sveglio i worker che prenderanno in incarico la richiesta. La mia idea è corretta ed implementabile? Mi date qualche suggerimento sull'implementazione?
Leggevo tuttavia in alcuni esempi che la select controlla tutto il server (quindi sia listener sia workers). In questo caso non saprei come implementare il tutto perchè io non so a priori i fd dei client.
Uno dei miei dubbi più grandi è come fare "dormire" tutti i workers che non stanno operando e come svegliarne 1 solo in modo equo (quindi non posso svegliarne 1 in particolare ma dovrebbe essere casuale). La select non svolge questa operazione quindi la devo implementare io tramite le lock, wait e signal?
Leggevo tuttavia in alcuni esempi che la select controlla tutto il server (quindi sia listener sia workers). In questo caso non saprei come implementare il tutto perchè io non so a priori i fd dei client.
Uno dei miei dubbi più grandi è come fare "dormire" tutti i workers che non stanno operando e come svegliarne 1 solo in modo equo (quindi non posso svegliarne 1 in particolare ma dovrebbe essere casuale). La select non svolge questa operazione quindi la devo implementare io tramite le lock, wait e signal?
Ultima modifica: