erlang VM 占用大约 600 os/windows 个机器线程

erlang VM occupies around 600 os/windows machine threads

我只是在 erlang 中实现简单的 tcp listener/server 应用程序,我使用 40000 个 tcp 连接测试这段代码,它在 windows 机器中创建了大约 600 os 线程,我 closed those 40K tcp 连接但 erlang VM 不释放 600 os/windows 线程。我该如何优化它,期待您的回复

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

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

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