Can heavy processes running in background cause lag in arduino's serial port communication with a computer?
Even though things seems to look like they run in parallel. They do not.
Each CPU can do only one thread at once, and your thread is one of those.

If more threads require CPU, then other threads have to wait. How long this wait takes depends on the quantum time of the kernel, and how nice your thread is.

So, it depends on your scheduler configuration.

To keep it simple:
The kernel handles serial communication via the driver. The driver has access to interrupts. This is to read data from the hardware immediately before the buffers overflow.
The driver then moves the data to a stream, this signals any threads waiting for this stream. And the kernel acts on these signals to give the threads some CPU to handle this data.

If you require low latency serial access you could make your thread less nice, giving it a higher priority over other threads. Biasing the scheduler to preempt other thread to run your thread when data is available.
Or write your own driver.  

In any case, a desktop operating system is not intended to be immediate. That's a real-time kernel task. Which is what you will need when you are interfacing hardware that requires low latency software control on a higher end platform.