This is a piece of Go code
func SignalDemo(){
sigs := make(chan os.Signal, 1)
finished := make(chan bool)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTSTP)
go func(){
for{
s := <-sigs
switch s{
case syscall.SIGINT:
fmt.Println("Received Ctrl+C")
finished<-true
case syscall.SIGTSTP:
fmt.Println("Received Ctrl+Z")
finished<-true
}
}
}()
fmt.Println("Waiting for Ctrl+C")
<-finished
fmt.Println("We are done here")
}
Below is a piece of rust code
pub fn signal_demo() -> Result<(), Error> {
let (tr, recv):(mpsc::Sender<&str>, mpsc::Receiver<&str>) = mpsc::channel();
let mut signals = Signals::new(&[SIGTERM, SIGINT, SIGTSTP])?;
thread::spawn(move|| {
'signal_loop: loop {
for signal in signals.pending() {
match signal {
SIGINT => {
tr.send("Received Ctrl+C").unwrap();
// break 'signal_loop;
}
SIGTERM => {
tr.send("Received signal SIGTERM").unwrap();
// break 'signal_loop;
}
SIGTSTP => {
tr.send("Received Ctrl+Z").unwrap();
// break 'signal_loop;
}
_ => unreachable!(),
}
}
}
});
println!("Waiting for Ctrl+C");
for message in recv{
println!("{}", message);
break;
}
Ok(())
}
When I am running the Go code, CPU utilization is around 5%. Whereas when I am running the Rust code (build to release version), the utilization is around 15%. What am I doing wrong in Rust? Or, is this expected?
Thanks & Regards,
Soupayan