Skip to content
  • rinpatch's avatar
    Refactor gun pooling and simplify adapter option insertion · 58a4f350
    rinpatch authored
    This patch refactors gun pooling to use Elixir process registry and
    simplifies adapter option insertion.
    
    Having the pool use process registry instead of a GenServer has a number of advantages:
    - Simpler code: the initial implementation adds about half the lines of code it deletes
    - Concurrency: unlike a GenServer, ETS-based registry can handle multiple checkout/checkin
    requests at the same time
    - Precise and easy idle connection clousure: current proposal for closing idle connections in
    the GenServer-based pool needs to filter through all connections once a minute and compare their
    last active time with closing time. With Elixir process registry this can be done
    by just using `Process.send_after`/`Process.cancel_timer` in the worker process.
    - Lower memory footprint: In my tests `gun-memory-leak` branch uses about 290mb on peak load (250 connections)
    and 235mb on idle (5-10 connections). Registry-based pool uses 210mb on idle and 240mb on peak load
    58a4f350