Skip to content

Commit a696d94

Browse files
authored
Don't use all of the available schedulers (elixir-editors#437)
This will make ElixirLS less resource-intensive because it isn't expected to be the only program running on the user's machine. Fixes elixir-editors#96
1 parent 4932739 commit a696d94

File tree

3 files changed

+12
-0
lines changed
  • apps
    • elixir_ls_debugger/lib/debugger
    • elixir_ls_utils/lib
    • language_server/lib/language_server

3 files changed

+12
-0
lines changed

Diff for: apps/elixir_ls_debugger/lib/debugger/cli.ex

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ defmodule ElixirLS.Debugger.CLI do
88
{:ok, _} = Application.ensure_all_started(:elixir_ls_debugger, :permanent)
99
IO.puts("Started ElixirLS debugger v#{Launch.debugger_version()}")
1010
Launch.print_versions()
11+
Launch.limit_num_schedulers()
1112
warn_if_unsupported_version()
1213
WireProtocol.stream_packets(&Server.receive_packet/1)
1314
end

Diff for: apps/elixir_ls_utils/lib/launch.ex

+10
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,16 @@ defmodule ElixirLS.Utils.Launch do
3131
get_version(:elixir_ls_debugger)
3232
end
3333

34+
def limit_num_schedulers do
35+
case System.schedulers_online() do
36+
num_schedulers when num_schedulers >= 4 ->
37+
:erlang.system_flag(:schedulers_online, num_schedulers - 2)
38+
39+
_ ->
40+
:ok
41+
end
42+
end
43+
3444
defp get_version(app) do
3545
case :application.get_key(app, :vsn) do
3646
{:ok, version} -> List.to_string(version)

Diff for: apps/language_server/lib/language_server/cli.ex

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ defmodule ElixirLS.LanguageServer.CLI do
1010

1111
IO.puts("Started ElixirLS v#{Launch.language_server_version()}")
1212
Launch.print_versions()
13+
Launch.limit_num_schedulers()
1314

1415
Mix.shell(ElixirLS.LanguageServer.MixShell)
1516
# FIXME: Private API

0 commit comments

Comments
 (0)