For all intensive purposes these should be essentially the same. To my knowledge, signals are reasonably efficient; but more than that, they're convenient and fun.
The benefit of a signal is it is made to only be called when it is needed.
For example, in option A, the GUI script must be constantly reading the variable to be ready for changes. (Albeit this should have no real performance cost in this case given the insignificance of the size of the data).
Option B, on the other hand, would not require the GUI script to constantly read that data. Instead the data would be updated only when a function is activated in the player script that could change the health of the player (the function connected to the signal).
Another interesting option to consider is a global script, or singleton. These set up data that can be simultaneously accesses by any node's script. You can read more about that very simple process here.