JuliaLang / julia

The Julia Programming Language
https://julialang.org/
MIT License
45.53k stars 5.46k forks source link

`JULIA_NUM_THREADS` ignored when embedding Julia on a Windows system #55468

Open bradcarman opened 1 month ago

bradcarman commented 1 month ago

The following c# code...

Environment.SetEnvironmentVariable("JULIA_NUM_THREADS", "4");
jl_init_with_image__threading(mBinPath, mSysImg);
jl_eval_string("println(\"Threads=$(Threads.nthreads())\")");
jl_eval_string("println(\"JULIA_NUM_THREADS=$(ENV[\"JULIA_NUM_THREADS\"])\")");

Produces the following output

Threads=1
JULIA_NUM_THREADS=4

In discussions with the Jeff and Keno it appears this happens in Windows because there are several environment stores in Windows, and the threads are created by reading with getenv (which access the machine level environment), while later in Julia the ENV is retrieved using getenvw (which access the process level environment).

vtjnash commented 1 month ago

We should switch from getenv to uv_os_getenv in the src directory