read
e sysread
hanno una documentazione molto simile. Quali sono le differenze tra i due?Qual è la differenza tra `read` e` sysread`?
risposta
Circa read
:
read
supporta i livelli PerlIO.read
funziona con qualsiasi handle di file Perl [1].read
buffer.read
ottiene i dati dal sistema in blocchi di dimensioni fisse di 8 KiB [2].read
potrebbe bloccare se sono disponibili meno dati di quelli richiesti [3].
Circa sysread
:
sysread
non supporta i livelli PerlIO (il che significa che richiede un grezzo maniglia binario anche noto come).sysread
funziona solo con gli handle di file Perl mappati a un file di sistema handle/descriptor [4].sysread
non buffer.sysread
esegue una singola chiamata di sistema.sysread
restituisce immediatamente se i dati sono disponibili per essere restituiti, anche se la quantità di dati è inferiore all'importo richiesto.
Sintesi e conclusioni:
read
opere con qualsiasi gestore di file Perl, mentresysread
è limitata a file di Perl maniglie associati a un file system maniglia/descrittore.read
non è compatibile conselect
[5], mentresysread
è compatibile conselect
.read
in grado di eseguire la decodifica per voi, mentresysread
richiede che si esegue la propria decodifica.read
dovrebbe essere più veloce per letture molto piccole, mentresysread
dovrebbe essere più veloce per letture più grandi.
Note:
Questi comprendono, ad esempio, file handle legati e quelli creati utilizzando
open(my $fh, '<', \$var)
.Prima di 5.14, Perl legge 4 blocchi KiB. Dalla versione 5.14, la dimensione dei blocchi è configurabile quando si crea
perl
, con un valore predefinito di 8 KiB.In base alla mia esperienza,
read
restituirà esattamente l'importo richiesto (se possibile) durante la lettura da un file normale, ma potrebbe restituire meno durante la lettura da una pipe. Questi risultati non sono affatto garantiti.fileno
restituisce un numero non negativo per questi. Questi includono, ad esempio, handle che leggono da file semplici, da pipe e da socket, ma non quelli menzionati in [1].Mi riferisco a quello a 4 argomenti chiamato da IO::Select.
Ottimo riassunto. - dovrebbe essere in perlfunc. Questo: "' read' dovrebbe essere più veloce per le letture di piccole dimensioni, mentre 'sysread' dovrebbe essere più veloce per le letture di grandi dimensioni." è esattamente ciò che è necessario. Naturalmente, date le infinite possibilità della parola reale, potrebbe non essere sempre ** vero, ma una linea guida perlinea perlopiù sincera è ciò che voglio. –
In una risposta a [un'altra domanda] (http://stackoverflow.com/a/36208336/2019415) ho usato ['Stream :: Reader'] (https://metacpan.org/pod/Stream::eader) . Come esperimento ho sostituito 'read' con' sysread' in 'Reader.pm' e ho ottenuto un throughput del 9-10% - sembrava troppo facile. Oltre ai bit ovvi (buffering, encoding,) è solo una questione di benchmarking e testing? Puoi parlare a qualsiasi integrità dei dati, elementi di failover/robustezza di questo? –
@ G.Cito in codice riusabile come Stream :: Reader, devi supporre che i filehandle abbiano dei layer, quindi sysread non è un'opzione. – ysth
- 1. Qual è la differenza tra read e pread in unix?
- 2. Qual è la differenza tra read() e recv() e tra send() e write()?
- 3. Qual è la differenza tra = e: =
- 4. Qual è la differenza tra Verilog! e ~?
- 5. Qual è la differenza tra? : e ||
- 6. qual è la differenza tra [[], []] e [[]] * 2
- 7. Qual è la differenza tra $ e $$?
- 8. Qual è la differenza tra ("") e (null)
- 9. Qual è la differenza tra dict() e {}?
- 10. Qual è la differenza tra " " e ""?
- 11. Qual è la differenza tra {0} e ""?
- 12. Qual è la differenza tra `##` e `hashCode`?
- 13. Qual è la differenza tra {0} e +?
- 14. Qual è la differenza tra .ToString() e + ""
- 15. qual è la differenza tra:.! e: r !?
- 16. Qual è la differenza tra "java.io.IOException: Timeout di connessione" e "SocketTimeoutException: Read timeout"
- 17. Qual è la differenza tra "è Nessuno" e "== Nessuno"
- 18. Unix: Qual è la differenza tra la fonte e l'esportazione?
- 19. Qual è la differenza tra il callback e la promessa
- 20. Qual è la differenza tra la sezione .got e .got.plt?
- 21. Qual è la differenza tra la lista() e []
- 22. Qual è la differenza tra GHC e la piattaforma Haskell?
- 23. Qual è la differenza tra sé e la finestra?
- 24. Qual è la differenza tra la cartella vim72 e vimfiles?
- 25. Qual è la differenza tra la serratura e RLock
- 26. Qual è la differenza tra la funzione() {}() e function() {}()
- 27. Qual è la differenza tra la crittografia SHA e AES?
- 28. Qual è la differenza tra la [OptionalField] e [NonSerialized]
- 29. Qual è la differenza tra Chisel e Lava e CLaSH?
- 30. Qual è la differenza tra queste funzioni
grrr :-) questa è una buona domanda –
Credito a @G. Cito per aver suggerito questa domanda. – ikegami