/ / Чи читає / пише в трубу дорогу операцію? - c, linux, pipe

Чи читає чи пише в трубу дорогу операцію? - c, linux, pipe

Як частину мого курсу Uni ми були показані і просили використовувати труби для спілкування між процесами (використовуючи pipe() і fork()) за кілька невеликих вправ. Немає проблем з його роботою чи концепцією, але поза цими вимогами я задаюсь питанням, наскільки ефективно це писати і читати з такою трубою?

Якщо у мене є якесь значення, яке я вкладав у блок з 4 байтів, чи краще пакувати і записати 100 значень (тобто 400 байт) одразу?

Або ж продуктивність, порівнянна, якщо я роблю 100, пише кожен з 4 байтів?

Чи запускає трубопровід 400 байт в один бікприймач робить що-небудь, поки запис не буде завершено - якщо приймач просто намагається прочитати перші 4 байти, чи зможе він зробити це після того, як він написав, але до того, як закінчиться все 400?

Відповіді:

4 для відповіді № 1

Труби обробляються подібно до файлів (звичайно,вони не перебувають на диску). Вони буферизовані однаково, і ручка до них обробляється аналогічно. Не намагайтеся вручну буферізати для труби; це робить це вже. Якщо ви "дійсно стурбовані", ви можете спробувати обидва способи і збирати деякі періоди роботи. Я пропоную просто писати блоки з 4 байтів, як у вас є. Не намагайтеся оптимізувати, якщо ви не знаєте, що є проблема.


1 для відповіді № 2

Я можу сказати вам анекдот. Я колись працював на веб-системі для вбудованої платформи Linux. Ми спробували труби для внутрішнього зв'язку, оскільки вони були набагато швидше, ніж сокет UNIX або TCP-сокетів. Врешті-решт, ми використовували сокети в будь-якому випадку, тому що їх було простіше використовувати в нашому застосуванні. (Ми потребували двосторонніх зв'язків і труб - лише один спосіб.)