Tubulações são geralmente implementado em um sistema operacional multitarefa, através do lançamento de todos os elementos ao mesmo tempo, como processos, e automaticamente de serviços de manutenção de dados de solicitações de leitura de cada processo com os dados gravados pelo processo a montante – isto pode ser chamado de um multiprocessed pipeline. Desta forma, a CPU será naturalmente trocada entre os processos pelo scheduler de modo a minimizar seu tempo de inatividade. Em outros modelos comuns, elementos são implementados como threads leves ou como coroutinas para reduzir a sobrecarga do SO muitas vezes envolvido com processos. Dependendo do so, threads podem ser programados diretamente pelo SO ou por um gerenciador de threads. Coroutinas são sempre agendadas por um gerente coroutino de alguma forma.
Normalmente, ler e escrever pedidos de bloqueio de operações, o que significa que a execução do processo de origem, ao escrever, é suspenso até que todos os dados podem ser gravados para o processo de destino, e, de igual modo, a execução do processo de destino, após a leitura, é suspenso até que pelo menos alguns dos dados solicitados podem ser obtidos a partir do processo de origem. Isto não pode levar a um impasse, onde ambos os processos esperariam indefinidamente um para o outro para responder, uma vez que pelo menos um dos dois processos logo depois terá seu pedido atendido pelo sistema operacional, e continuará a funcionar.
para o desempenho, a maioria dos sistemas operacionais que implementam tubos utilizam tampões de tubos, que permitem que o processo fonte forneça mais dados do que o processo de destino é atualmente capaz ou disposto a receber. Sob a maioria dos Unices e sistemas operacionais Unix-like, um comando especial também está disponível que implementa um buffer de tubos de tamanho potencialmente muito maior e configurável, tipicamente chamado de “buffer”. Este comando pode ser útil se o processo de destino for significativamente mais lento do que o processo de origem, mas é de qualquer forma desejado que o processo de origem possa completar a sua tarefa o mais rápido possível. Por exemplo, se o processo de fonte consiste em um comando que lê uma faixa de áudio de um CD e o processo de destino consiste em um comando que comprime os dados de áudio de forma de onda para um formato como MP3. Neste caso, buffering a faixa inteira em um buffer de pipe permitiria que a unidade de CD para girar para baixo mais rapidamente, e permitir que o Usuário para remover o CD da unidade antes do processo de codificação terminar.
tal comando buffer pode ser implementado usando chamadas de sistema para leitura e escrita de dados. O desperdício de tempo de espera pode ser evitado usando instalações como pesquisa ou seleção ou multithreading.alguns exemplos notáveis de sistemas de software de pipeline incluem:
- RaftLib – C / C++ Apache 2.0 License