use std::io::ErrorKind;
use std::net::TcpStream;
fn main() {
let address = "localhost:7000";
loop {
match TcpStream::connect(address.clone()) {
Err(err) => { match err.kind() {
ErrorKind::ConnectionRefused => { continue; },
kind => panic!("Error occurred: {:?}", kind),
}; },
Ok(_stream) => { /* do some stuff here */ },
}
}
}
Considerare il pezzo di codice Rust sopra. Ciò che è interessante per me qui non è il ramo Ok
, ma piuttosto il ramo secondario ErrorKind::ConnectionRefused
accoppiato con lo loop
: è molto economico, CPU-wise, consumando meno dell'1% della CPU. È grandioso, è quello che voglio.L'uso degli errori di Rust all'interno di un `ciclo` comporta un blocco economico, ma perché?
Ma io non capisco il motivo per cui è a buon mercato: il codice paragonabile in C sarebbe probabilmente consumano 100% fondamentalmente NOP ING (non proprio, ma abbastanza vicino). Qualcuno può aiutarmi a capire perché è così economico?
Forse 'connect' non è così veloce? – justanothercoder
È incredibilmente veloce, quando mi collego a un altro socket (ad esempio avviando il mio server di accompagnamento) esplode il mio ciclo a 10 ripetizioni in meno tempo di quello che posso battere gli occhi :) – jjpe
Qual è il reale valore di 'indirizzo'? Sospetto che 'TcpStream :: connect' aspetta il risolutore DNS. – ArtemGr