[must-read repost] Обманчиво простая задачка или немного про системное программирование

Nov 23, 2013 07:30

Если вы претендуете на то, чтобы быть называться программистом, это надо обязательно прочитать. Ну то есть много кто про это знает, но много кто, увы, нет.

Я в свое время славно походил по этим граблям, и у других их видел в количестве.

Оригинал взят у zamotivator в Обманчиво простая задачка или немного про системное программированиеВыношу из своего поста и ( Read more... )

repost, программирование, must-read

Leave a comment

kodt_rsdn November 23 2013, 15:22:13 UTC
Пользуясь авторской лексикой, - в жопу такое объяснение.
Что за детский сад про двух дураков? Дурак здесь третий, тот, кто архитектуру разрабатывал, либо тот, кто эту архитектуру воплощает.
Потому что.

Из описания задачи следует, что протокол обмена строго полудуплексный, вопрос-ответ.
Если первый процесс что-то недосказал и ждёт, то фига с два он чего-то дождётся, будь там хоть семафор, хоть мультитред, хоть что угодно. Этот сука самолично нарушил протокол, причём таким способом, который невозможно дёшево диагностировать. Отпусти тангенту, балда!!!
Хотя, с другой стороны может оказаться что-то интеллектуальное. Ждём пять секунд конца фразы, - её нет, пишем об ошибке или даже крешимся к чёрту.

Вот ситуация со взаимоблокировкой из-за переполнения очередей - это да, это печаль. Тут не два дурака, тут гораздо хуже.
Протокол всё равно полудуплексный. Алекс Юстасу вываливает десяток гигабайт данных за один сеанс, Юстас их обрабатывает, и отправляет обратно Алексу, Алекс что-то делает.
Понятно, что где-то это всё нужно буферизовать. В наивной версии - буферизация отдана операционной системе, внутри пайпа. В продвинутой - то ли Юстас не должен торопиться с отдачей, а принять всё и вывалить пачкой, то ли Алекс - вычитывать понемногу и у себя складывать. А хватит у него места на это дело? А они вообще приспособлены для пакетной обработки конвеерных данных?

А, извините, нахрена вообще было устраивать пинг-понг? Конвеер по кругу не бегает, Юстас не Алексу должен отправлять, а кому-то третьему.
Либо пакеты должны заведомо пролезать через буфера ОС, либо мы играем в эмуляцию терминала, и здесь в принципе не должно быть блокировок (хоть дед, хоть ливлоков).

Reply


Leave a comment

Up