Количество потоков ОС, порожденных процессом go, никогда не уменьшится? - PullRequest
1 голос
/ 19 сентября 2019

Рассмотрим программу golang, работающую в системе со значением 10. GOMAXPROCS. Из-за блокировки системных вызовов ОС порождает еще 30 потоков, в результате чего к процессу присоединяются 40 потоков ОС.

После того, как все заблокированные системные вызовы вернутся, будет ли процесс иметь 40 потоков ОС?Если да, то можем ли мы сделать вывод, что количество потоков ОС, сопоставленных с процессом golang, может расти, но никогда не уменьшается?

1 Ответ

1 голос
/ 19 сентября 2019

Да, в настоящее время потоки, созданные из-за заблокированных процедур, не останавливаются.Существует дискуссия о периодическом закрытии незанятых потоков: время выполнения: пусть незанятые потоки ОС выходят # 14592

Хотя есть способ убить поток.Если вы звоните по номеру runtime.LockOSThread() без вызова ее коллеги runtime.UnlockOSThread() согласно документу:

Если вызывающая программа завершается без разблокировкипоток, поток будет прерван.

Вы также можете сделать это, используя (источник: время выполнения: завершить заблокированный поток ОС, если его программа завершает работу # 20395 ):

syscall.Syscall(syscall.SYS_EXIT, 0, 0, 0)
...