The Go runtime has several threads, for GC, scheduler, etc. 

> On Jun 26, 2019, at 4:48 AM, Subramanian Sridharan <clawsonfir...@gmail.com> 
> wrote:
> 
> Hi guys
> 
> Today while analyzing CPU usage of one of our processes written in go, I 
> noticed that there were multiple threads associated with the process which is 
> actually serial. (Doesn't make use of goroutines)
> I wanted to know if it was the expected behaviour or some issue in our 
> service.
> 
> So I tested the same with this snippet:
> func main() {
>     for {
>     }
> }
> 
> 
> And to my surprise, even this ever running process had multiple threads 
> associated with it:
> 
> ➜  go build everRunningProgram.go
> ➜  ./everRunningProgram &
> [1] 13745
> ➜  top -b -n 1 -H -p 13745       
> top - 15:07:38 up  4:03,  1 user,  load average: 0.63, 0.80, 0.72
> Threads:   5 total,   1 running,   4 sleeping,   0 stopped,   0 zombie
> %Cpu(s):  4.9 us,  1.1 sy,  0.3 ni, 93.2 id,  0.0 wa,  0.0 hi,  0.5 si,  0.0 
> st
> KiB Mem : 16301396 total,  4780820 free,  5033472 used,  6487104 buff/cache
> KiB Swap:        0 total,        0 free,        0 used. 10270784 avail Mem 
> 
>   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
> 13745 mani-86+  25   5  101856    764    584 R 99.9  0.0   0:10.38 
> everRunningProg
> 13746 mani-86+  25   5  101856    764    584 S  0.0  0.0   0:00.00 
> everRunningProg
> 13747 mani-86+  25   5  101856    764    584 S  0.0  0.0   0:00.00 
> everRunningProg
> 13748 mani-86+  25   5  101856    764    584 S  0.0  0.0   0:00.00 
> everRunningProg
> 13749 mani-86+  25   5  101856    764    584 S  0.0  0.0   0:00.00 
> everRunningProg
> 
> I tried the same with other programming languages and they didn't seem to 
> exhibit this behaviour.
> 
> Rust:
> fn main() {
>       loop {}
> }
> 
> ➜  rustc everRunningProgram.rs
> ➜  ./everRunningProgram &
> [2] 14265
> ➜  top -b -n 1 -H -p 14265
> top - 15:11:36 up  4:07,  1 user,  load average: 1.59, 1.29, 0.95
> Threads:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
> %Cpu(s):  4.9 us,  1.1 sy,  0.5 ni, 93.0 id,  0.0 wa,  0.0 hi,  0.5 si,  0.0 
> st
> KiB Mem : 16301396 total,  4584980 free,  5132508 used,  6583908 buff/cache
> KiB Swap:        0 total,        0 free,        0 used. 10111372 avail Mem 
> 
>   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
> 14265 mani-86+  25   5   13156    980    868 R 99.9  0.0   0:10.22 
> everRunningProg
> 
> C:
> int main() {
>       while(1);
> }
> 
> ➜  cc everRunningProgram.c 
> ➜  ./a.out &             
> [3] 14413
> ➜  top -b -n 1 -H -p 14413
> top - 15:14:34 up  4:10,  1 user,  load average: 2.43, 1.81, 1.22
> Threads:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
> %Cpu(s):  4.8 us,  1.1 sy,  0.8 ni, 92.7 id,  0.0 wa,  0.0 hi,  0.5 si,  0.0 
> st
> KiB Mem : 16301396 total,  4603696 free,  5098020 used,  6599680 buff/cache
> KiB Swap:        0 total,        0 free,        0 used. 10134048 avail Mem 
> 
>   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
> 14413 mani-86+  25   5    4380    712    648 R 99.9  0.0   0:06.07 a.out
> 
> Python:
> while True:
>     pass
> 
> ➜  scripts python3 everRunningProgram.py &
> [4] 14587
> ➜  scripts top -b -n 1 -H -p 14587       
> top - 15:16:35 up  4:12,  1 user,  load average: 4.08, 2.62, 1.59
> Threads:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
> %Cpu(s):  4.8 us,  1.1 sy,  1.1 ni, 92.5 id,  0.0 wa,  0.0 hi,  0.5 si,  0.0 
> st
> KiB Mem : 16301396 total,  4551664 free,  5146576 used,  6603156 buff/cache
> KiB Swap:        0 total,        0 free,        0 used. 10082516 avail Mem 
> 
>   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
> 14587 mani-86+  25   5   33056   8736   5472 R 99.9  0.1   0:06.63 python3
> 
> 
> Is there any explanation for this behaviour on Go?
> What's really happening behind the scenes?
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to golang-nuts+unsubscr...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/golang-nuts/a15cf939-02cb-4c51-af20-f0109ffe63df%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/8CEACBA6-925B-459D-8F2C-32ACAFE85DB6%40ix.netcom.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to