title: First in, first out
text: # First in, first out
  
  «Primero en entrar, primero en salir» (PEPS, en inglés first in, first out o FIFO) es un concepto utilizado en estructuras de datos, contabilidad de costos y teoría de colas. Guarda analogía con las personas que esperan en una cola y van siendo atendidas en el orden en que llegaron, es decir, que "la primera persona que entra es la primera persona que sale".
  
  También se le denomina «primero en llegar, primero en ser atendido» (del inglés first come, first served o FCFS).
  
  ## Informática
  
  En informática, FIFO se utiliza en estructuras de datos para implementar colas. La implementación puede efectuarse con ayuda de arreglos o vectores, o bien mediante el uso de punteros y asignación dinámica de memoria.
  
  Si se implementa mediante vectores, el número máximo de elementos que puede almacenar FIFO está limitado al que se haya establecido en el código del programa antes de la compilación (cola estática) o durante su ejecución (cola pseudoestática o dinámica). Sea cual sea la opción elegida, el número de elementos que podrá almacenar la cola quedará determinado durante toda la ejecución del programa. Así, el sistema debe reservar el tamaño de memoria necesario para acoger todos los datos, sea cual sea el número de elementos usados.
  
  En algunas aplicaciones, esto supone un problema, ya que puede desconocerse el número de elementos a contener en la cola. La sencilla solución de reservar más memoria de la que se supone que se necesitará, puede conducir a un despilfarro de la memoria (la cola puede que esté llena, aprovechando toda la memoria reservada; o bien, nunca terminar de llenarse, ocupando recursos innecesarios en memoria). Sin embargo, si se usa asignación dinámica de memoria, el número máximo no está declarado en tiempo de compilación, sino en tiempo de ejecución, es decir, se reserva memoria a medida que se necesite expandir el tamaño de la cola (adaptándose al tamaño necesario en cada momento en función de los elementos que hay en la cola), haciendo un mejor uso de la memoria disponible.
  
  Uno de los usos de las colas es la exploración ‘en anchura’ de un árbol binario de búsqueda. Otro uso típico de las colas, es la gestión de descargas de una aplicación peer-to-peer (P2P).
  
  ## Contabilidad
  
  En contabilidad, FIFO es un método para registrar el valor de un inventario.
  
  Su uso es apropiado cuando se cuenta con varios lotes de un mismo producto. Este método presume que el primer producto ingresado en el almacén será el primero en salir por efectos de valorización de inventarios.
  
  ## Electrónica
  
  Los FIFO se usan comúnmente en circuitos de electrónica para almacenaje y hacer control de flujo. Hablando de hardware, un FIFO consiste básicamente en un conjunto de punteros de lectura/escritura, almacenamiento y lógica de control. El almacenamiento puede ser SRAM, flip-flops, latches o cualquier otra forma adecuada de almacenamiento. Para FIFO de un tamaño importante se usa usualmente una SRAM de doble puerto, donde uno de los puertos se usa para la escritura y el otro para la lectura.
  
  Un «FIFO sincrónico» maneja el mismo reloj tanto para las lecturas como para las escrituras. Un «FIFO asicrónico» es aquel que utiliza diferentes relojes, uno para lectura y otro para la escritura. Cuando se habla de FIFO asincrónico se introduce el tema de la meta-estabilidad.
  
  Una implementación común de un FIFO asincrónico usa un código Gray (o cualquier código de unidad de distancia) para los punteros de lectura y escritura de modo de asegurarse una generación de banderas (flags) segura/estable.
  
  Otra nota adicional respecto de la generación de banderas es que uno debe necesariamente usar punteros aritméticos para generar banderas para implementaciones asincrónicas de FIFO.
  
  Por otro lado, uno puede usar tanto un acercamiento leaky bucket o punteros aritméticos para generar banderas en una implementación FIFO sincrónica.
  
  En FIFO, se pueden enumerar:
  
  * full (lleno),
  * empty (vacío),
  * almost full (casi lleno),
  * almost empty (casi vacío).
  
  ### FIFO lleno/vacío
  
  En hardware, un FIFO se usa para propósitos de sincronización. Comportándose como una cola circular y, por lo tanto, contiene dos punteros:
  
  * Puntero de lectura / registro de dirección de lectura.
  * Puntero de escritura / registro de dirección de escritura.
  
  Las direcciones de lectura y escritura están ambas inicialmente en la primera ubicación de la memoria y la cola FIFO está vacía.
  
  **FIFO vacía (empty)**
  
  Cuando el registro de dirección de lectura alcanza al registro de dirección de escritura, la cola FIFO dispara la señal o bandera vacío.
  
  **FIFO llena (full)**
  
  Cuando el registro de dirección de escritura alcanza al registro de dirección de lectura, la cola FIFO dispara la señal o bandera lleno.
  
  LIFO
  
  Cuando se trata de un almacén es fundamental el conocimiento de estas siglas.
  
  En este artículo nos dan un ejemplo de como ordenar un almacén con dicha fórmula https://casasincreibles.com/almacen-ordenado/ y que consiste en un método de gestión de la mercancía es elemental en un almacén, por muy pequeño que sea. Generalmente, diferenciamos dos, que responden a las siglas de FIFO y LIFO. El FIFO es el más utilizado, pero todo dependerá del tipo de mercancía:
  
  FIFO (Primero En Entrar, Primero En Salir): viene del inglés “First In, First Out” y se basa en que el lote de stock que primera entra, es el que primero sale. Se utiliza siempre con los productos perecederos como los alimentos y con cualquier tipo de mercancía que tenga fecha de caducidad o pueda quedar obsoleta.
  
  LIFO (Último En Entrar, Primero En Salir): del inglés “Last In, First Out”. Si comercias con productos no perecederos que no caducan ni pierden valor, este método es ideal para evitar que tengas que mover la mercancía.
  
  ## Alimentos
  
  Procedimiento que tiene como finalidad desplazar las materias primas, ingredientes, insumos y alimentos conforme a su fecha de entrada, elaboración y/o caducidad. Consiste en rotular, etiquetar o marcar con cualquier otro método los alimentos con dichas fechas y colocarlos de tal manera que se asegure la rotación de los mismos en almacenamiento en seco, refrigerado y/o congelado.
  
  El sistema es utilizando en el manejo de materias primas, ingredientes, insumos y alimentos, HACCP, sistemas de gestión de alimentos (ISO:22000), esquemas reconocidos de GFSI entre otros.
  
  