Difference between Signal.trap("EXIT") and at_exit()?

Hi, according to the doc of Signal.trap:

The special signal name “EXIT” or signal number zero
will be invoked just prior to program termination

So it seems the same as at_exit { }. In my tests I’ve realized that
at_exit { } runs later and, at_exit {} can be filled multiple times.
Is the only difference?