Following answer is based on own RTS experience, which visually aligns with Age Of Empires and other RTS games
Nowadays there is not one, but 2 Fog Of Wars (FOW)
Static FOW is simpler (once revealed, remains open):
First FOW is calculated on CPU and is used for games logic to test what units "see" in the game and can/cannot do. For an RTS it must be 100% identical between all players machines and graphics settings and be 100% repeatable, assuming that RTS traditionally use lock-step multiplayer. Given that, to avoid extra CPU load, it has to be more granular - e.g. 1 sample per tile per 5 game logic's ticks (or you can optimize by updating units sight only when they arrive at new tile).
Second FOW is rendered on GPU and is more dynamic / detailed. This FOW is what player sees. GPU can render/update it every frame at much higher resolution that CPU could handle (e.g. 4096*4096 pixels), to produce smooth sight circles. The FOW being much more accurate, can mismatch game logics FOW slightly, which is okay, since typical mismatches happen on FOW edge where exact judgement is vague.
Why not use GPU FOW for both logic and visuals? It takes a lot of time to stream texture data from GPU back to CPU. GPU rendering can not be trusted, it can greatly differ between players configurations / drivers / settings.
For static FOW you can get away with a sort of "additive" updates - each time for each FOW sample - pick the brightest and keep it.
Making FOW dynamic is another complex problem. In simplest, dynamic FOW can take 5 states: fully covered, semi-explored, explored, semi-revealed, fully revealed. You can map these states to be 0, 1-49, 50, 51-99, 100-255. Now when unit reveals fog, it reveals it to 255. Each tick you dim "semi-revealed" and "fully revealed" FOW by e.g. 10. This means that when unit leaves, FOW remains "fully revealed" for 15 ticks before starting to fade to semi-revealed and then another 5 ticks before stopping at "explored".