【问题标题】:erlang VM occupies around 600 os/windows machine threadserlang VM 占用大约 600 个 os/windows 机器线程
【发布时间】:2020-01-29 00:18:36
【问题描述】:

我只是在 erlang 中实现简单的 tcp 侦听器/服务器应用程序,我使用 40000 个 tcp 连接测试此代码,它在 windows 机器中创建了大约 600 个 os 线程,我关闭了那些 40K tcp 连接,但 erlang VM 没有释放 600 个 os/windows 线程。我如何优化这个,我期待您的回复

【问题讨论】:

    标签: tcp process erlang


    【解决方案1】:

    erl_poll(负责检查套接字上的新数据的机制)的 Windows 实现使用 WaitForMultipleObjects。此 API 不允许每次调用超过 64 个对象,因此 erl_poll 创建每个侦听 64 个对象的线程。这些是你看到的线程。

    没有机制可以在使用这些线程后删除它们,因此它们将一直保留到系统终止。如果您将来再次使用那么多连接,它们当然会被重新使用。

    执行此操作的代码位于:https://github.com/erlang/otp/blob/master/erts/emulator/sys/win32/erl_poll.c

    【讨论】:

    • 是的,谢谢你的回复我理解这个概念:)
    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    相关资源
    最近更新 更多