avva: (moose)
[personal profile] avva
Странное дело - по опыту интервьюирования в последнее время, кандидаты почти всегда хорошо знают, что такое мьютексы, семафоры и критические секции, зачем они нужны и какие есть основные предосторожности в работе с ними; но мало кто почти никто не знает, что бывает atomic increment (и другие атомарные операции) и как ими пользоваться. Я почему-то думал, что это знание примерно одного уровня и источника.

(точнее, фразу atomic increment знают, но думают, например, что это работает "через мьютексы" или "с помощью OS")
Page 1 of 5 << [1] [2] [3] [4] [5] >>

Date: 2013-02-28 09:34 am (UTC)
From: [identity profile] longobard.livejournal.com
Следующий уровень сложности - понимать, что происходит с кэшом инструкций процессора при использовани атомарных операций. В итоге зачастую обычный мьютекс оказывается дешевле.

Date: 2013-02-28 09:36 am (UTC)
From: [identity profile] 8f4a4bdd981a.livejournal.com
Зависит от моды собеседователей, кандидаты просто учат типовые вопросы.

Date: 2013-02-28 09:37 am (UTC)
From: [identity profile] krocodl.livejournal.com
потому что до cas доходят уже тогда, когда вдоволь наелись грабель с блокирующими подходами. А с ними у большинства знакомство крайне поверхностное или теоретическое

Date: 2013-02-28 09:46 am (UTC)
From: [identity profile] getman.livejournal.com
Это же разные уровни, сначала на курсе алгоритмов запугивают критическими секциями, потом на курсе ассемблера студенты боятся даже думать об атомарный операциях( а вдруг не сработает?).

Date: 2013-02-28 09:47 am (UTC)
From: [identity profile] djuffin.livejournal.com
А как реализовать "обычный мьютекс" без использования атомарных операций?

Date: 2013-02-28 10:07 am (UTC)
From: [identity profile] archaicos.livejournal.com
Они и про CAS наверное не знают. :)

Ещё часто не знают кто делает проверку доступа в память по заданному адресу. Часто говорят, что ОС, не особо задумываясь. Знатная бы была производительность у компа, если бы на каждой инструкции каждой программы ОС бы проверяла адрес и права доступа. Access Violation, как он известен в простонародьи, - это такая магия в ОС. :)

Date: 2013-02-28 10:10 am (UTC)
From: [identity profile] archaicos.livejournal.com
Запрещать прерывания (или выключать scheduler) на время доступа, если один процессор. Если процессоров больше, то похитрее.
Edited Date: 2013-02-28 10:11 am (UTC)

Date: 2013-02-28 10:34 am (UTC)
From: [identity profile] b0rg.livejournal.com
на каждом втором интервью теперь спрашивают про мутексы. А потом сажают фтп файло качать через SQL Server Integration Services. На вижуал васике ага.

Date: 2013-02-28 10:47 am (UTC)
From: [identity profile] furry.livejournal.com
О. А я вот как-то стесняюсь изливать душу по поводу проведенных интервью. Ну вроде как разглашу военную тайну, что я такое спрашиваю ;)

Date: 2013-02-28 10:53 am (UTC)
From: [identity profile] mikkim08.livejournal.com
А conditional variables (posix threads) они знают ?

Date: 2013-02-28 11:06 am (UTC)
From: [identity profile] a-konst.livejournal.com
Простите, а какой CAS вы имеете ввиду?

Date: 2013-02-28 11:11 am (UTC)
From: [identity profile] archaicos.livejournal.com
Который Compare-And-Swap, он же Compare-And-Exchange. Ещё из этой же оперы есть Test-And-Set (см. Wikipedia/Google/etc).

Date: 2013-02-28 11:19 am (UTC)
From: [identity profile] a-konst.livejournal.com
Ага, понятно.

Date: 2013-02-28 11:28 am (UTC)
From: [identity profile] iratus.livejournal.com
Mне кажется, что это мало кому нужно. Кроме того в этой сфере творится полный балаган, зависящий от компилятора, архитектуры и т.д. и т.п.
Начинаются сложности с мульти-левел кэш. Короче сложность возрастает в геом. прогрессии.

Думаю, что гораздо интереснее спрашивать кандидатов не что такое мьютексы и семафоры, а как избежать ими пользоваться, почему правильно написанный код совсем не обязательно должен требовать мьютексной синхронизации, например.

Date: 2013-02-28 11:29 am (UTC)
From: [identity profile] a-konst.livejournal.com
Вот, кстати, да. иногда удивляет, почему на собеседованиях спрашивают знание вещей, которые потом совсем никак не нужны в реальной работе.

Date: 2013-02-28 11:39 am (UTC)
From: [identity profile] a-konst.livejournal.com
О, а какие "атомарные операции" Вы имеете ввиду?
Вроде, обычно, подразумеваются машинные инструкции, которые аппаратно гарантируются атомарными, и соответственно с кэшом инструкций процессора не происходит ровно ничего необычного.

Date: 2013-02-28 11:40 am (UTC)
From: [identity profile] avva.livejournal.com
Я тоже избегаю этого, просто подумал, что один простой частный пример ничему не навредит.

Date: 2013-02-28 11:41 am (UTC)
From: [identity profile] avva.livejournal.com
Не знаю, смотря кто, думаю. Я не задавал вопросов, которые их требуют.

Date: 2013-02-28 11:54 am (UTC)
From: [identity profile] netp-npokon.livejournal.com
почему правильно написанный код совсем не обязательно должен требовать мьютексной синхронизации, например.
Это какое-то чересчур общее утверждение. Если речь не идет об однопоточном коде и/или отсутствии разделяемых данных, то корректно написанному коду придется как-то синхронизоваться, как ни крути.
Или правильно написанный код - это тот, в котором каждый поток работает со своей копией данных?

Date: 2013-02-28 11:59 am (UTC)
From: [identity profile] mikkim08.livejournal.com
А какой балаган творится с posix threads, например ? Вроде есть спецификация, и если ей следовать, то о компиляторе, архитектуре и т.д. можно не задумываться.

Date: 2013-02-28 12:10 pm (UTC)
From: [identity profile] ircicq.livejournal.com
Наверное это коррелирует со знанием ассемблера.

Из знания системных примитивов логически никак не следует, что некоторые частные случаи реализуемы аппаратно.

Date: 2013-02-28 12:17 pm (UTC)
From: [identity profile] archaicos.livejournal.com
Потому, что лучше придумать не могут.

Date: 2013-02-28 12:27 pm (UTC)
From: [identity profile] archaicos.livejournal.com
Не гарантируются. ADD, SUB, INC, DEC, AND, OR, XOR, NOT, NEG, XADD, CMPXCHG* по сути представляют собой 3 операции в 1-й: чтение значения из памяти, работа с ним, запись результата обратно. На однопроцессорном компьюторе никак невозможно попасть в промежуток между чтением и записью. На многопроцессорном можно, будет race condition. Чтобы его не было надо добавить префикс LOCK. Кстати, даже простой MOV будет не атомарный, если адрес операнда не выровнен. Вот такие вроде, да не вроде.

Date: 2013-02-28 12:31 pm (UTC)
From: [identity profile] dimrub.livejournal.com
Рабочие места разные бывают.

Date: 2013-02-28 12:54 pm (UTC)
yigal_s: (Default)
From: [personal profile] yigal_s
чисто теоретически, по этому поводу есть разные мнения

Threads Cannot be Implemented as a Library. Hans-J. Boehm
http://www.hpl.hp.com/techreports/2004/HPL-2004-209.pdf

впрочем, дела это не меняет, обычному программисту об этом лучше не думать )))
Page 1 of 5 << [1] [2] [3] [4] [5] >>

January 2026

S M T W T F S
    1 2 3
4 5 6 7 8 910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 11th, 2026 03:23 pm
Powered by Dreamwidth Studios