Если вы претендуете на то, чтобы быть называться программистом, это надо обязательно прочитать. Ну то есть много кто про это знает, но много кто, увы, нет.
Я в свое время славно походил по этим граблям, и у других их видел в количестве.
Оригинал взят у
zamotivator в
Обманчиво простая задачка или немного про системное программированиеВыношу из своего поста и
(
Read more... )
Что за детский сад про двух дураков? Дурак здесь третий, тот, кто архитектуру разрабатывал, либо тот, кто эту архитектуру воплощает.
Потому что.
Из описания задачи следует, что протокол обмена строго полудуплексный, вопрос-ответ.
Если первый процесс что-то недосказал и ждёт, то фига с два он чего-то дождётся, будь там хоть семафор, хоть мультитред, хоть что угодно. Этот сука самолично нарушил протокол, причём таким способом, который невозможно дёшево диагностировать. Отпусти тангенту, балда!!!
Хотя, с другой стороны может оказаться что-то интеллектуальное. Ждём пять секунд конца фразы, - её нет, пишем об ошибке или даже крешимся к чёрту.
Вот ситуация со взаимоблокировкой из-за переполнения очередей - это да, это печаль. Тут не два дурака, тут гораздо хуже.
Протокол всё равно полудуплексный. Алекс Юстасу вываливает десяток гигабайт данных за один сеанс, Юстас их обрабатывает, и отправляет обратно Алексу, Алекс что-то делает.
Понятно, что где-то это всё нужно буферизовать. В наивной версии - буферизация отдана операционной системе, внутри пайпа. В продвинутой - то ли Юстас не должен торопиться с отдачей, а принять всё и вывалить пачкой, то ли Алекс - вычитывать понемногу и у себя складывать. А хватит у него места на это дело? А они вообще приспособлены для пакетной обработки конвеерных данных?
А, извините, нахрена вообще было устраивать пинг-понг? Конвеер по кругу не бегает, Юстас не Алексу должен отправлять, а кому-то третьему.
Либо пакеты должны заведомо пролезать через буфера ОС, либо мы играем в эмуляцию терминала, и здесь в принципе не должно быть блокировок (хоть дед, хоть ливлоков).
Reply
Leave a comment