在运行时确定libuv线程池的大小?

问题描述:

我知道我们可以在运行相关进程之前通过设置UV_THREADPOOL_SIZE环境变量来控制libuv线程池大小。在运行时确定libuv线程池的大小?

但是,由于这可能会改变(取决于服务器配置),因此在运行时检查libuv实际使用的线程池大小将会很好。我们应该怎么做?

谢谢。

+0

线程池大小不会改变。如果您想要当前值,为什么不使用getenv或uv_os_getenv? – dlmeetei

线程池大小当前不能在运行时更改。第一次操作在池中排队时,libuv将读取UV_THREADPOOL_SIZE环境变量并创建线程池。从那时起,它的大小不会改变。

+0

我知道大小是固定的,但UV_THREADPOOL_SIZE只是一个环境变量,并且不是固定的。这个值可能已经改变得太晚了(例如,在操作在池中排队之后)并且可能不会反映正在使用的实际线程池大小... – logidelic

+0

好点。目前线程池是一个不向外部公开的实现细节(以env变量为模),所以添加一个获取其大小的方法不会对您有所帮助,因为您无法对其进行更改或做任何事情。现在有一个(现在已经停滞)的计划,转而使用“弹性”线程池:https://github.com/libuv/libuv/issues/267,这将使这一指标更不相关。为什么你需要在运行时知道这一点? – saghul

+0

我写了一个C++节点模块插件,可以由我无法控制的节点进程加载。如果在模块中,我可以检查libuv线程池的大小,以帮助决定如何最有效地运行,这将非常有用。我不能依赖UV_THREADPOOL_SIZE,因为已知某些开发人员在其节点脚本中设置了此选项,但已为时过晚而没有任何效果。 – logidelic