I'm writing a program that uses a C library that was binded to Rust. I am also using Rayon to call some functions from that library in parallel. While it works fine, I've noticed there is a huge amount of involuntary context switches that make the multithreaded version much slower than the standard one.
Does anybody know what could be causing that?
Here's the result of the time command with multiple threads:
User time (seconds): 13.13 System time (seconds): 5.44 Percent of CPU this job got: 582% Elapsed (wall clock) time (h:mm:ss or m:ss): 0:03.18 Maximum resident set size (kbytes): 1968684 Minor (reclaiming a frame) page faults: 491505 Voluntary context switches: 196762 Involuntary context switches: 402217
Here's the same but with a single thread:
User time (seconds): 1.53 System time (seconds): 0.72 Percent of CPU this job got: 100% Elapsed (wall clock) time (h:mm:ss or m:ss): 0:02.25 Maximum resident set size (kbytes): 116376 Minor (reclaiming a frame) page faults: 483165 Voluntary context switches: 338 Involuntary context switches: 37
Thanks in advance!