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

Nov 23, 2013 07:30

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

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

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

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

Leave a comment

mudasobwa November 23 2013, 06:31:03 UTC
А семафоры придумали тру́сы, да? Никогда не бывает `sleep` разумным. Никогда. Ну, пока ты не внутри драйвера флешки, конечно, да и то - и там давно придумали нормальные механизмы.

Reply

wizzard0 November 23 2013, 08:03:52 UTC
Кхм. Речь не о семафоре. Если говорить о семафоре с людьми, которым нужно срочно поговорить с подпроцессом, то за деревьями не будет видно леса.

Reply

nponeccop November 23 2013, 10:14:44 UTC
в данном конкретном случае семафор - рукалицо. Пайпы вполне самодостаточный механизм синхронизации, чистый message passing же.

Reply

wizzard0 November 23 2013, 11:48:15 UTC
Типа того.

Reply

mudasobwa November 25 2013, 11:39:03 UTC
Да нет, не типа того. В идеальном сферическом мире - да, но в условиях нашего бездорожья если полагаться на синхронизацию тем же механизмом, который отвечает за обмен данными, то грозит уже не рукалицо, а граблилоб.

Я тысячу раз сталкивался с тем, что `write` повис именно «почему-то». Сетевой интерфейс отошел поссать, или ядро вдруг уволило диспетчера, или еще какая экзотика, которую даже не отладить толком. Пролезло N бит и ага, висим. Почему? - Да хер его разберет. И дело, поверьте, часто бывает не в лимитах.

Reply

mindfactor November 23 2013, 16:49:14 UTC
>Никогда не бывает `sleep` разумным. Никогда.

Я пользовал для того, чтобы гарантированно дождаться отрисовки формы, прежде чем с ней что-то дальше осмысленное делать.

Reply

sassa_nf November 25 2013, 11:27:59 UTC
sleep - единственный примитив, синхронизирующийся со временем.

Кто-то что-то делает слишком долго - убить. Как, если не sleep и не timed wait?.

Reply

mudasobwa November 25 2013, 11:32:04 UTC
Я имел в виду в нити выполнения, а не в вотчдоге. При этом вотчдоги остаются костылем.

У всего, что может затянуться, должны быть таймауты, а если функция может повиснуть, но по таймауту отваливаться не умеет - ее не нужно использовать.

Reply

sassa_nf November 25 2013, 12:51:20 UTC
верно, кроме того, что "всё, что может затянуться" унутре должно таки какой-то вочдог и sleep иметь :)

Reply

mudasobwa November 25 2013, 13:08:29 UTC
Я как-то теряю нить. Вроде речь шла о пайповом вводе-выводе? Ну так там уже есть свой `scheduler` (на 20 слайде можно немного подробнее почитать). Он (сюрприз!) на низкоуровневых мьютексах как раз.

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

Reply

sassa_nf November 26 2013, 02:37:08 UTC
а я о "Никогда не бывает `sleep` разумным. Никогда."

Reply


Leave a comment

Up