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 */ },
}
}
}
उपरोक्त जंग कोड के टुकड़े पर विचार करें। मेरे लिए दिलचस्प क्या है Ok
शाखा नहीं है, बल्कि ErrorKind::ConnectionRefused
उप-शाखा loop
के साथ मिलकर है: यह बहुत सस्ता है, सीपीयू-वार, 1% से कम CPU का उपभोग करता है। यह बहुत अच्छा है, मैं यही चाहता हूं।सस्ते लूपिंग में 'लूप' परिणामों के अंदर जंग की त्रुटियों का उपयोग करना, लेकिन क्यों?
लेकिन मुझे समझ नहीं आता क्यों यह सस्ती है: सी में तुलनीय कोड की संभावना 100% मूल रूप से एनओपी आईएनजी (ठीक नहीं लेकिन काफी करीब) की खपत होगी। क्या कोई मुझे समझने में मदद कर सकता है कि यह इतना सस्ता क्यों है?
शायद 'कनेक्ट' इतना तेज़ नहीं है? – justanothercoder
यह तेजी से तेज़ है, जब मैं किसी अन्य सॉकेट से कनेक्ट करता हूं (यानी मेरे साथ सर्वर शुरू करके) यह मेरी आंखों को झपकी देने से कम समय में मेरे 10-पुनरावृत्ति पाश के माध्यम से उड़ाता है :) – jjpe
वास्तविक 'पता' मान क्या है? मुझे संदेह है कि 'टीसीपीस्ट्रीम :: कनेक्ट' DNS रिज़ॉल्वर के लिए इंतजार कर रहा है। – ArtemGr