In computing, buffer underrun or buffer underflow is a state occurring when a buffer used to communicate between two devices or processes is fed with data at a lower speed than the data is being read from it. This requires the program or device reading from the buffer to pause its processing while the buffer refills. This can cause undesired and sometimes serious side effects, since the data being buffered is generally not suited to stop-start access of this kind.
The term should not be confused with buffer overflow, a condition where a portion of memory being used as a buffer has a fixed size but is filled with more than that amount of data. Whereas buffer overflows are usually the result of programming errors, and thus preventable, buffer underruns are often the result of transitory issues on the "connection" which is being buffered—either a connection between two processes, with others competing for CPU time; or a physical link, with devices competing for bandwidth.
The simplest guard against such problems is to increase the size of the buffer—if an incoming data stream needs to be read at 1 bit per second, a buffer of 10 bits would allow the connection to be blocked for up to 10 seconds before failing, whereas one of 60 bits would allow a blockage of up to a minute. However, this requires more memory to be available to the process or device, which can be expensive. It also assumes that the buffer starts full—requiring a potentially significant pause before the reading process begins—and that it will always be full unless the connection is currently blocked. This latter caveat means that if the data does not, on average, arrive significantly faster than it is needed, any "blockages" on the connection will be cumulative—so that "dropping" one bit every minute on our hypothetical connection would lead to the 60-bit buffer underrunning if the connection remained active for an hour. In real-time applications, a large buffer size also increases the latency between input and output, which is undesirable in low-latency applications, for example video conferencing.
If the framebuffer of the graphics controller does not get updated, the picture of the computer screen will appear to hang until the buffer receives new data. A feature of many video player programs is the ability to drop frames if the system is overloaded, intentionally letting the buffer underrun.
The buffer in an audio controller is a ring buffer. If an underrun occurs and the audio controller is not stopped, it will keep repeating the sound contained in the buffer, which may hold a quarter of a second or so. This happens if the operating system hangs during audio playback, usually for a short while, until possibly an error handling routine (e.g. blue screen of death) stops the audio controller.