में चल रहे थ्रेड निम्न कोड पर विचार करें, मैं x थ्रेड को स्पिन करना चाहता हूं, जो कोड के भीतर निर्दिष्ट सर्वर पर x अनुरोधों को आग लगाएगा, हालांकि वर्तमान में, मेरा एप्लिकेशन प्रत्येक थ्रेड और x अनुरोधों को समाप्त करने का इंतजार कर रहा है अगले एक को कताई से पहले।समांतर
मैं इस async करने के बारे में कैसे जा सकता हूं?
extern crate hyper;
extern crate time;
use hyper::Client;
use hyper::header::Connection;
use time::*;
use std::thread;
use std::sync::{Arc, Mutex};
struct Request {
elapsed_time: f64
}
impl Request{
fn new(elapsed_time: f64) -> Request{
Request {
elapsed_time: elapsed_time,
}
}
}
fn main() {
let requests = Arc::new(Mutex::new(Vec::new()));
for _x in 0..100 {
println!("Spinning up thread...");
let mut client = Client::new();
let thread_items = requests.clone();
let handle = thread::spawn(move || {
for _x in 0..100 {
println!("Firing the request");
let start = time::precise_time_s();
let _res = client.get("http://jacob.uk.com")
.header(Connection::close())
.send().unwrap();
let end = time::precise_time_s();
thread_items.lock().unwrap().push((Request::new(end-start)));
}
});
handle.join().unwrap();
}
}
कार्यक्रम उत्पादन:
handle.join().unwrap();
आप सही में धागा आप join
यह शुरू करने के बाद पाश में एक धागा पर अमल, और उसके बाद:
Spinning up thread...
Firing request
Firing request
Firing request
Firing request
Spinning up thread...
Firing request
Firing request
Firing request
Firing request
Spinning up thread...
Firing request
Firing request
Firing request
Firing request
धागे में शामिल नहीं होने के साथ एक समस्या यह है कि (गैर-डिमन्स के लिए) मुख्य धागे मरने पर प्रक्रिया मर जाती है, इसलिए ओपी के कोड में कार्यकर्ता धागे को छोटा कर दिया जाएगा। – delnan