diff options
author | Fabio Alessandrelli <fabio.alessandrelli@gmail.com> | 2021-11-02 01:51:43 +0100 |
---|---|---|
committer | Fabio Alessandrelli <fabio.alessandrelli@gmail.com> | 2021-11-02 04:16:00 +0100 |
commit | 4ed1d977fcca5922cf8254b1ffbf16cf47b310b4 (patch) | |
tree | 39492aaf8f883eadc8230dfcacd22d7e05c45027 /core | |
parent | 455e027725668742a52e08a173ea337a3c416b25 (diff) |
[OS] Add ThreadWorkPool default size to OS.
Some platforms (*cough* web *cough*) have hard limits on the number of
threads that can be spawned.
Currently, ThreadPoolWork (mostly used in rendering/physics servers)
will spawn as many threads as CPUs available causing exception on
machines with high CPU count.
This commit adds a new overridable method to OS that returns the default
thread pool size (still the CPU count by default), and overrides it for
the JavaScript platform so it always allocate only one thread.
We can likely improve the whole ThreadPoolWork in the future to always
allocate X amount of threads, and assign jobs to them on the fly, but
that will require some more architectural changes.
Diffstat (limited to 'core')
-rw-r--r-- | core/os/os.h | 1 | ||||
-rw-r--r-- | core/templates/thread_work_pool.cpp | 2 |
2 files changed, 2 insertions, 1 deletions
diff --git a/core/os/os.h b/core/os/os.h index 52bf731501..abfa7ac993 100644 --- a/core/os/os.h +++ b/core/os/os.h @@ -298,6 +298,7 @@ public: virtual void set_exit_code(int p_code); virtual int get_processor_count() const; + virtual int get_default_thread_pool_size() const { return get_processor_count(); } virtual String get_unique_id() const; diff --git a/core/templates/thread_work_pool.cpp b/core/templates/thread_work_pool.cpp index 17969a2c90..710f043a4a 100644 --- a/core/templates/thread_work_pool.cpp +++ b/core/templates/thread_work_pool.cpp @@ -47,7 +47,7 @@ void ThreadWorkPool::_thread_function(void *p_user) { void ThreadWorkPool::init(int p_thread_count) { ERR_FAIL_COND(threads != nullptr); if (p_thread_count < 0) { - p_thread_count = OS::get_singleton()->get_processor_count(); + p_thread_count = OS::get_singleton()->get_default_thread_pool_size(); } thread_count = p_thread_count; |