diff options
| -rw-r--r-- | CMakeLists.txt | 8 | ||||
| -rw-r--r-- | src/platform/windows/win_io.c | 15 |
2 files changed, 18 insertions, 5 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 04cc14de..226bb2eb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -138,6 +138,14 @@ if (NNG_MAX_EXPIRE_THREADS) add_definitions(-DNNG_MAX_EXPIRE_THREADS=${NNG_MAX_EXPIRE_THREADS}) endif() +# Poller threads. These threads run the pollers. This is mostly used +# on Windows right now, as the POSIX platforms use a single threaded poller. +set(NNG_MAX_POLLER_THREADS 8 CACHE STRING "Upper bound on I/O poller threads, 0 for no limit") +mark_as_advanced(NNG_MAX_POLLER_THREADS) +if (NNG_MAX_POLLER_THREADS) + add_definitions(-DNNG_MAX_POLLER_THREADS=${NNG_MAX_POLLER_THREADS}) +endif() + # Platform checks. if (CMAKE_C_COMPILER_ID STREQUAL "GNU") diff --git a/src/platform/windows/win_io.c b/src/platform/windows/win_io.c index 489dc01a..b08f2e4d 100644 --- a/src/platform/windows/win_io.c +++ b/src/platform/windows/win_io.c @@ -1,5 +1,5 @@ // -// Copyright 2020 Staysail Systems, Inc. <info@staysail.tech> +// Copyright 2023 Staysail Systems, Inc. <info@staysail.tech> // Copyright 2018 Capitar IT Group BV <info@capitar.com> // // This software is supplied under the terms of the MIT License, a @@ -92,12 +92,17 @@ nni_win_io_sysinit(void) int nthr = nni_plat_ncpu() * 2; // Limits on the thread count. This is fairly arbitrary. - if (nthr < 4) { - nthr = 4; + if (nthr < 2) { + nthr = 2; } - if (nthr > 64) { - nthr = 64; +#ifndef NNG_MAX_POLLER_THREADS +#define NNG_MAX_POLLER_THREADS 8 +#endif +#if NNG_MAX_POLLER_THREADS > 0 + if (nthr > NNG_MAX_POLLER_THREADS) { + nthr = NNG_MAX_POLLER_THREADS; } +#endif if ((win_io_thrs = NNI_ALLOC_STRUCTS(win_io_thrs, nthr)) == NULL) { return (NNG_ENOMEM); } |
