douchi7073 2019-09-19 09:59
浏览 162
已采纳

go进程产生的OS线程数量将永远不会减少吗?

Consider a golang program running on a system with GOMAXPROCS value 10. Due to blocking system calls, OS spawns 30 more threads resulting in 40 OS threads attached to the process.

After all the blocked system calls returns, then will the process still be having 40 OS threads? If yes, then can we conclude that the number of OS threads mapped to a golang process can grow but never comes down?

  • 写回答

1条回答 默认 最新

  • dongliuxia9495 2019-09-19 10:17
    关注

    Yes, currently threads spawned due to blocked goroutines are not stopped. There's a discussion about closing idle threads periodically: runtime: let idle OS threads exit #14592

    There is a way to kill a thread though. If you call runtime.LockOSThread() in a goroutine without calling its counterpart runtime.UnlockOSThread(), as per the doc:

    If the calling goroutine exits without unlocking the thread, the thread will be terminated.

    You may also do it using (source: runtime: terminate locked OS thread if its goroutine exits #20395):

    syscall.Syscall(syscall.SYS_EXIT, 0, 0, 0)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line