FIFO (ing. first in, first out "birinci daxil, ilk çıxış") — zaman və prioritetlərlə bağlı məlumatların təşkili və manipulyasiya üsulu. Bu ifadə "birinci daxil, ilk çıxış" prinsipinə uyğun olaraq prosesi tənzimləməklə növbənin və ya ziddiyyətli tələblərə xidmətin texniki işlənməsi prinsipini təsvir edir. Birinci gələnə xidmət verilir, sonrakı birincinin xidməti başa çatana qədər gözləyir və s.
Bu prinsip insanlar növbəyə daxil olduqları ardıcıllıqla xidmət alarkən növbəyə duran şəxslərin davranışına bənzəyir. Eyni şey, məsələn, tənzimlənməyən kəsişmədə, sürücülər sürməyə davam etmək üçün öz növbəsini gözlədikdə baş verir.
Daha geniş mənada, LIFO (last-in, first-out son gələn, ilk çıxan) abstraksiya FIFO abstraksiyasının əksidir. Daha az istifadə olunan FILO sinonimini nəzərə alsaq, fərq daha aydın ola bilər ki, bu da birinci gələn, axırıncı çıxan ("ilk gələn, sonuncu çıxan") mənasını verir. Əslində, hər iki abstraksiya daha ümumi siyahı manipulyasiya anlayışının spesifik hallarıdır. Fərq siyahıda (məlumatlarda) deyil, məzmuna giriş qaydasındadır. Birinci halda siyahının bir ucunda toplama, digər ucundan isə çıxmaq, ikinci halda isə toplama və çıxmaq bir ucunda edilir.[1]
FIFO vəziyyətində siyahı növbə adlanır, LIFO vəziyyətində isə yığın adlanır.
Növbənin bir variantı prioritet növbədir, bunun üçün FIFO adı istifadə edilə bilməz, çünki bu halda məlumat strukturunun emalı fərqli şəkildə baş verir. Növbə nəzəriyyəsi növbənin daha ümumi konsepsiyasını, eləcə də xidmətin "ciddi FİFO" prinsipinə uyğun həyata keçirildiyi növbələr arasında qarşılıqlı əlaqəni əhatə edir. Bu prinsipi ifadə etmək üçün FCFS (first come, first served "ilk gələn, ilk xidmət edilən") abbreviaturasından da istifadə olunur. İstehsal üçün FPFO variantı (FPFO (first product, first out) mümkündür.
Kompüter elmində bu termin növbədə emal edilmiş məlumatların saxlanma üsulunu ifadə edir. Növbənin hər bir elementi növbə məlumat strukturunda saxlanılır (istisna yoxdur). Növbəyə əlavə edilən ilk məlumatlar ondan ilk çıxarılacaq, yəni emal gəlişlə eyni ardıcıllıqla növbəli olaraq həyata keçirilir.
Tipik bir məlumat strukturu belə görünür (C++-da nümunə):
struct fifo_node
{
struct fifo_node *next;
value_type value;
};
class fifo
{
fifo_node *front;
fifo_node *back;
fifo_node *dequeue(void)
{
fifo_node *tmp = front;
front = front->next;
return tmp;
}
queue(value)
{
fifo_node *tempNode = new fifo_node;
tempNode->value = value;
back->next = tempNode;
back = tempNode;
}
};
Populyar Unix sistemlərinə C/C++ proqramlaşdırma dillərindəki sys/queue.h başlıq faylı daxildir ki, bu da FİFO növbə proqramlarında istifadə olunan makroları ehtiva edir.