In effetti non esiste un altro metodo.
In realtà esiste un altro tipo di blocco che non può essere affrontato se non da thread e cioè errori di pagina. Questi possono accadere nel codice del programma, nei dati del programma, nell'allocazione della memoria o nei dati mappati dai file. È quasi impossibile evitarli (in realtà è possibile bloccare alcune pagine in memoria, ma è un'operazione privilegiata e probabilmente si ritorcerà contro rendendo il kernel un cattivo lavoro di gestione della memoria da qualche altra parte). Quindi:
- non si può davvero estirpare ogni ultima possibilità di bloccare per un particolare client, in modo da non perdere tempo con artisti del calibro di
open
e stat
. La rete probabilmente aggiungerà ritardi maggiori rispetto a queste funzioni comunque.
- Per prestazioni ottimali, è necessario disporre di thread sufficienti in modo che alcuni possano essere programmati se gli altri sono bloccati in caso di errore di pagina o blocco di blocco simile.
Inoltre, se è necessario leggere ed elaborare, elaborare e scrivere dati durante la gestione di una richiesta di rete, è più rapido accedere al file utilizzando il mapping della memoria, ma questo è il blocco e non può essere reso non bloccante. Quindi i moderni server di rete tendono ad attaccarsi alle chiamate di blocco per la maggior parte delle cose e hanno semplicemente abbastanza thread per mantenere la CPU occupata mentre altri thread sono in attesa di I/O.
Il fatto che i server più moderni siano multi-core è un'altra ragione per cui sono necessari comunque più thread.
fonte
2013-01-08 08:30:03
Non mi aspetterei che sia possibile. Per fare ciò devi fermare tutte le attività del file system nel sistema (per assicurarti che nulla blocchi la tua prossima chiamata a causa di una condizione di competizione tra il tempo che controlli e il tempo in cui chiami effettivamente la funzione), che nessun desktop sane OS ti lascerebbe fare. – Mehrdad
Perché è così importante per te? Nella maggior parte dei casi, un processo sta facendo molto meno "open" syscalls di ad es. 'leggi' e' scrivi', e queste 2 syscalls comuni possono essere non bloccanti!E molto spesso 'open' è abbastanza veloce ... –
Altri sistemi (Windows per uno) in realtà gestiscono questo consentendo di richiedere I/O e quindi ricevere una notifica quando è fatto. Come watain, non ho mai capito come ottenere Linux per farlo bene (+1). – DrC