/ / ¿Es una operación costosa leer / escribir en una tubería? - c, linux, pipe

¿Leer / escribir en una tubería es una operación costosa? - c, linux, tubería

Como parte de mi curso de Uni, hemos sido mostrados y solicitados el uso de tuberías para comunicarse entre procesos (utilizando pipe() y fork()) para unos pequeños ejercicios. No hay problemas para que funcione o con el concepto, pero fuera de estos requisitos, me pregunto qué tan eficiente es escribir y leer con una tubería de este tipo.

Si tengo algún valor que estoy empaquetando en un bloque de 4 bytes, ¿es mejor empaquetar y escribir 100 valores (hasta 400 bytes) todos a la vez?

¿O es el rendimiento comparable si hago 100 escribe cada uno de 4 bytes?

¿La tubería de 400 bytes en una sola vez evita lael receptor realiza cualquier cosa hasta que se complete la escritura; suponiendo que el receptor solo está tratando de leer los primeros 4 bytes, ¿podrá hacerlo después de que se reescriban, pero antes de que se terminen los 400?

Respuestas

4 para la respuesta № 1

Las tuberías se manejan de manera similar a los archivos (por supuesto,no están en el disco). Se almacenan en búfer de la misma forma, y ​​el identificador de ellos se trata de manera similar. No intente almacenar manualmente un búfer para una tubería; ya lo hace Si está realmente preocupado por esto, puede intentar ambas formas y recopilar algunos tiempos de ejecución. Le sugiero que simplemente escriba bloques de 4 bytes como los tiene. No intente optimizar a menos que sepa que hay un problema.


1 para la respuesta № 2

Te puedo contar una anécdota. Una vez trabajé en un sistema web para una plataforma Linux incrustada. Intentamos canalizaciones para la comunicación interna, porque eran mucho más rápidas que el socket UNIX o los sockets TCP. Al final, usamos sockets de todos modos, porque eran más fáciles de usar en nuestra aplicación. (Necesitábamos comunicación bidireccional y las tuberías son solo una.)