Никогда нет потребность для использования дизайна patterns— можно всегда писать код, который игнорирует все, что стало известно о кодировании до now— это может даже работать. Но шаблоны разработки могут сделать вещи легче, дав Вам общий язык для обсуждения дизайна.
шаблоны Diesign не представляют слишком мало abstraction— они - попытка увеличить уровень абстракции. Можно сказать, что "этот бит является Посетителем", а не "вот некоторый код, который рекурсивно пересекает дерево объектов, работающих на операции на них".
Когда буфер канала заполняется (обычно 4 КБ или около того), процесс записи останавливается до тех пор, пока процесс чтения не прочитает некоторые из рассматриваемых данных; но здесь вы ничего не читаете, пока подпроцесс не будет завершен, отсюда и тупик. Документы на wait
действительно очень четко сформулировали это:
Предупреждение Это зайдет в тупик, если дочерний процесс генерирует достаточно результатов в канал stdout или stderr, чтобы он блокирует ожидание канала ОС буфер для приема дополнительных данных. Использовать общаться (), чтобы избежать этого.
Если вы не можете использовать общение
по какой-то причине, пусть подпроцесс записывает во временный файл, а затем вы можете подождать
и прочитать это файл, когда он будет готов - запись в файл, а не в канал, не приводит к возникновению тупиковой ситуации.
Взгляните на документы . В нем говорится, что вы не должны использовать ожидание, так как это может вызвать мертвую блокировку. Попробуйте использовать связь .