Signals can be thought of as events that happen in our application. These events can be subscribed by certain receivers who then invoke a function whenever the event occurs. The occurrence of events is broadcasted by senders who can specify the arguments that can be used by the function, which will be triggered by the receiver.
You should refrain from modifying any application data in the signals because signals aren't executed in a specified order and can easily lead to data corruption.