erlang VM 占用大约 600 个 os/windows 机器线程
Posted
技术标签:
【中文标题】erlang VM 占用大约 600 个 os/windows 机器线程【英文标题】:erlang VM occupies around 600 os/windows machine threads 【发布时间】:2020-01-29 00:18:36 【问题描述】:我只是在 erlang 中实现简单的 tcp 侦听器/服务器应用程序,我使用 40000 个 tcp 连接测试此代码,它在 windows 机器中创建了大约 600 个 os 线程,我关闭了那些 40K tcp 连接,但 erlang VM 没有释放 600 个 os/windows 线程。我如何优化这个,我期待您的回复
【问题讨论】:
【参考方案1】:erl_poll(负责检查套接字上的新数据的机制)的 Windows 实现使用 WaitForMultipleObjects。此 API 不允许每次调用超过 64 个对象,因此 erl_poll 创建每个侦听 64 个对象的线程。这些是你看到的线程。
没有机制可以在使用这些线程后删除它们,因此它们将一直保留到系统终止。如果您将来再次使用那么多连接,它们当然会被重新使用。
执行此操作的代码位于:https://github.com/erlang/otp/blob/master/erts/emulator/sys/win32/erl_poll.c
【讨论】:
是的,谢谢你的回复我理解这个概念:)以上是关于erlang VM 占用大约 600 个 os/windows 机器线程的主要内容,如果未能解决你的问题,请参考以下文章
日600亿消息,月4.65亿用户——WhatsApp的Erlang世界