A little question : does someone know if the I2C write function only in the outgoing buffer and then the data is send in background while the program runs, or does the program stop until the data is send ?
If you are referring to Wire.endTransmission that blocks (waits) until the buffer is sent, if that answers your question.
Wire.send (now called Wire.write) doesn't wait, nor does it do any sending.
You could rewrite it to be non-blocking, someone may have done that already.
The Arduino is a single-threaded processor. There is no "background". I hope that answers your question.
But it can receive serial data asynchronously, because the USART has a buffer. I think the TwoWire interface must have at least a single-byte buffer, maybe more (hard to find that bit in the datasheet).
It can also send "in the background". According to the datasheet page 223:
Because the TWI is interrupt-based, the application software is free to carry on other operations during a TWI byte transfer.