о синхронизации
Feb. 28th, 2013 11:21 amСтранное дело - по опыту интервьюирования в последнее время, кандидаты почти всегда хорошо знают, что такое мьютексы, семафоры и критические секции, зачем они нужны и какие есть основные предосторожности в работе с ними; но мало кто почти никто не знает, что бывает atomic increment (и другие атомарные операции) и как ими пользоваться. Я почему-то думал, что это знание примерно одного уровня и источника.
(точнее, фразу atomic increment знают, но думают, например, что это работает "через мьютексы" или "с помощью OS")
(точнее, фразу atomic increment знают, но думают, например, что это работает "через мьютексы" или "с помощью OS")
no subject
Date: 2013-02-28 09:34 am (UTC)no subject
Date: 2013-02-28 09:36 am (UTC)no subject
Date: 2013-02-28 09:37 am (UTC)no subject
Date: 2013-02-28 09:46 am (UTC)no subject
Date: 2013-02-28 09:47 am (UTC)no subject
Date: 2013-02-28 10:07 am (UTC)Ещё часто не знают кто делает проверку доступа в память по заданному адресу. Часто говорят, что ОС, не особо задумываясь. Знатная бы была производительность у компа, если бы на каждой инструкции каждой программы ОС бы проверяла адрес и права доступа. Access Violation, как он известен в простонародьи, - это такая магия в ОС. :)
no subject
Date: 2013-02-28 10:10 am (UTC)no subject
Date: 2013-02-28 10:34 am (UTC)no subject
Date: 2013-02-28 10:47 am (UTC)no subject
Date: 2013-02-28 10:53 am (UTC)no subject
Date: 2013-02-28 11:06 am (UTC)no subject
Date: 2013-02-28 11:11 am (UTC)no subject
Date: 2013-02-28 11:19 am (UTC)no subject
Date: 2013-02-28 11:28 am (UTC)Начинаются сложности с мульти-левел кэш. Короче сложность возрастает в геом. прогрессии.
Думаю, что гораздо интереснее спрашивать кандидатов не что такое мьютексы и семафоры, а как избежать ими пользоваться, почему правильно написанный код совсем не обязательно должен требовать мьютексной синхронизации, например.
no subject
Date: 2013-02-28 11:29 am (UTC)no subject
Date: 2013-02-28 11:39 am (UTC)Вроде, обычно, подразумеваются машинные инструкции, которые аппаратно гарантируются атомарными, и соответственно с кэшом инструкций процессора не происходит ровно ничего необычного.
no subject
Date: 2013-02-28 11:40 am (UTC)no subject
Date: 2013-02-28 11:41 am (UTC)no subject
Date: 2013-02-28 11:54 am (UTC)Это какое-то чересчур общее утверждение. Если речь не идет об однопоточном коде и/или отсутствии разделяемых данных, то корректно написанному коду придется как-то синхронизоваться, как ни крути.
Или правильно написанный код - это тот, в котором каждый поток работает со своей копией данных?
no subject
Date: 2013-02-28 11:59 am (UTC)no subject
Date: 2013-02-28 12:10 pm (UTC)Из знания системных примитивов логически никак не следует, что некоторые частные случаи реализуемы аппаратно.
no subject
Date: 2013-02-28 12:17 pm (UTC)no subject
Date: 2013-02-28 12:27 pm (UTC)no subject
Date: 2013-02-28 12:31 pm (UTC)no subject
Date: 2013-02-28 12:54 pm (UTC)Threads Cannot be Implemented as a Library. Hans-J. Boehm
http://www.hpl.hp.com/techreports/2004/HPL-2004-209.pdf
впрочем, дела это не меняет, обычному программисту об этом лучше не думать )))