о синхронизации
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:47 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-02-28 11:39 am (UTC)Вроде, обычно, подразумеваются машинные инструкции, которые аппаратно гарантируются атомарными, и соответственно с кэшом инструкций процессора не происходит ровно ничего необычного.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-02-28 09:36 am (UTC)no subject
Date: 2013-02-28 01:56 pm (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 10:07 am (UTC)Ещё часто не знают кто делает проверку доступа в память по заданному адресу. Часто говорят, что ОС, не особо задумываясь. Знатная бы была производительность у компа, если бы на каждой инструкции каждой программы ОС бы проверяла адрес и права доступа. Access Violation, как он известен в простонародьи, - это такая магия в ОС. :)
no subject
Date: 2013-02-28 11:06 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-02-28 10:34 am (UTC)no subject
Date: 2013-02-28 11:29 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-02-28 10:47 am (UTC)no subject
Date: 2013-02-28 11:40 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-02-28 10:53 am (UTC)no subject
Date: 2013-02-28 11:41 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-02-28 11:28 am (UTC)Начинаются сложности с мульти-левел кэш. Короче сложность возрастает в геом. прогрессии.
Думаю, что гораздо интереснее спрашивать кандидатов не что такое мьютексы и семафоры, а как избежать ими пользоваться, почему правильно написанный код совсем не обязательно должен требовать мьютексной синхронизации, например.
no subject
Date: 2013-02-28 11:54 am (UTC)Это какое-то чересчур общее утверждение. Если речь не идет об однопоточном коде и/или отсутствии разделяемых данных, то корректно написанному коду придется как-то синхронизоваться, как ни крути.
Или правильно написанный код - это тот, в котором каждый поток работает со своей копией данных?
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-02-28 12:10 pm (UTC)Из знания системных примитивов логически никак не следует, что некоторые частные случаи реализуемы аппаратно.
no subject
Date: 2013-03-01 01:48 am (UTC)смысл, назначение, актуальные способы использования атомарных операций при чтении большинства вариантов документации совершенно неясен. (Типа, ну есть такое, ну и что?)
Практически единственный общедоступный источник информации об их устройстве - знание ассемблера.
no subject
Date: 2013-02-28 01:21 pm (UTC)Гуси и их свиньи...
Date: 2013-02-28 01:47 pm (UTC)Отсюда вывод - проверка такого рода знаний так же бессмысленна (да и несправедлива по отношению к Вашему будущему сотруднику) как и задания вопросов типа "А ты знаешь что я знаю но не скажу?", загадок типа "как релизовать бинарный поиск без операции сравнения" и "догадайся что cкажет компайлер HPUX если бросить эксепшн из дестрактора". То есть это - да, работает как фильтр - кого берем кого не берем, но с тем же успехом можно использовать рост или цвет глаз кандидата. ИМХО - цвет глаз честнее...
no subject
Date: 2013-02-28 01:53 pm (UTC)Я например встречал людей, который позиционировали себя как эмбеддед программисты, но не знали, что такое volatile и зачем он нужен.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-02-28 03:08 pm (UTC)no subject
Date: 2013-03-01 04:26 pm (UTC)no subject
Date: 2013-02-28 03:13 pm (UTC)Ну, то есть, в принципе знаю, что команда процессора выполняется атомарно, что можно инкрементировать переменную или поменять местами содержимое регистров одной командой на некоторых процессорах (в частности, на x86), но вот что будет, если моё "i++" будет выполняться на неведомой архитектуре с несколькими неизвестными мне процессорами, да ещё и будучи скомпилирована неизвестным мне компилятором, либо если i окажется 64-битным на 32-битной архитектуре - не знаю. Полагаю, что ничего хорошего, и ловить race condition можно будет долго. А потому лучше обвешу мьютексами от греха.
Наверное, в каких-то случаях есть какие-нибудь специальные слова для гарантии атомарности, но это частности, работающие в какой-нибудь одной среде и на одной платформе, а мьютексы - это общее, теоретическое, различается только реализация.
Примерно как можно знать области видимости и правила наследования, но не знать конкретную pragma конкретного компилятора, которая в каких-то случаях позволяет сделать более эффективный код. Можно знать, что в обработчике сигнала ничего лишнего делать не нужно, но не знать, что в большинстве современных систем оттуда менять глобальные переменные безопасно.
Это, кажется, немного разные уровни знаний - теоретический и практический.
no subject
Date: 2013-02-28 03:32 pm (UTC)Но теоретически знать об их существовании и том, как они работают - полезно. И потому, что есть этот редкий 1%, когда такую возможность стоит принять во внимание, и потому, что это часть базового понимания, как синхронизация устроена, как сами мьютексы написаны итд.
Я, кроме того, хочу добавить - кажется, многие люди решили, будто я считаю, что кандидат обязан знать об атомарных операциях. Это не так. Если кандидат хорошо это знает и умеет пользоваться, это небольшой плюс в его пользу; если нет - это в худшем случае слабый сигнал, да и то вряд ли. Знать и уметь пользоваться мьютексами с моей точки зрения в 100 раз важнее. Просто меня удивило, что человек за человеком не знают о них - мне казалось, что это знание я приобрел примерно в то же время, когда узнал о семафорах и мьютексах, и что это типично. Наверное, это не так.
(no subject)
From:(no subject)
From:no subject
Date: 2013-02-28 06:54 pm (UTC)no subject
Date: 2013-02-28 07:49 pm (UTC)no subject
Date: 2013-02-28 09:21 pm (UTC)no subject
Date: 2013-02-28 09:18 pm (UTC)no subject
Date: 2013-03-01 08:02 am (UTC)R.J.A. Buhr :)
no subject
Date: 2013-03-01 08:13 am (UTC)самый частый случай - чтобы треды не передрались за объект или подождали пока придёт запрос от клиента
no subject
Date: 2013-03-01 11:02 am (UTC)no subject
Date: 2013-03-01 12:30 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-03-01 12:32 pm (UTC)no subject
Date: 2013-03-01 02:02 pm (UTC)В java atomic операции с стандартной библиотеке появились сильно позже. Соответственно не в каждой книжке про них написано.
no subject
Date: 2013-03-01 03:48 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-03-02 06:55 pm (UTC)мне кажется, что я его уже видела в ленте пару месяцев назад.
и мало того, что видела - у меня и в тот раз было такое же дежа-вю.
извините.