В
сентябрьском номере ACM Queue озаглавленном "The Concurrency Problem" Jim Larson, разработчик из гугла (а также разработчик движка репликации Amazon SimpleDB), опубликовал хорошую вводную статью в Erlang под названием "Erlang for Concurrent Programming"
P.S. Дизайн сайта журнала довольно странный, как дать ссылку на саму статью я так и не понял.
Здравствуйте, Курилка, Вы писали:
К>P.S. Дизайн сайта журнала довольно странный, как дать ссылку на саму статью я так и не понял.
Читать с сайта неудобно, но можно выкачать
журнал в формате PDF целиком.
Здравствуйте, Курилка, Вы писали:
спасибо за ссылку,прочитал статью, есть вопрос, нельзя ли обьяснить как в badsequence получился race,
и как это поймать на тестировании,что такое вообще:
injecting timing jitter
?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, cadet354, Вы писали:
C>Здравствуйте, Курилка, Вы писали:
C>спасибо за ссылку,прочитал статью, есть вопрос, нельзя ли обьяснить как в badsequence получился race,
Там же в комменте написано:
write(Sequence, N + 1), % BAD: race!
Проблема в том, что get_next/1 происходит "снаружи" сервера, т.е. если 2 клиента одновременно обратятся, то можем получить, что вернётся 2 раза одно и то же число (ну и запишется тоже). В "обычном" многопоточном коде это решается локами, тут же это должна быть операция самого сервера (как в sequence2.erl).
C>и как это поймать на тестировании,что такое вообще:
C>C>injecting timing jitter
C>?
"гонки" ловятся очень плохо
А jitter — это типа "дрожание" (т.е. получается что-то аля "добавление временного разброса"), т.е. надо делать много параллельных запросов и интервалы между ними должны быть случайными (дабы проверить как можно больше комбинаций) .
Здравствуйте, Курилка, Вы писали:
К>Там же в комменте написано:
да вижу это
К>К>write(Sequence, N + 1), % BAD: race!
К>Проблема в том, что get_next/1 происходит "снаружи" сервера, т.е. если 2 клиента одновременно обратятся, то можем получить, что вернётся 2 раза одно и то же число (ну и запишется тоже). В "обычном" многопоточном коде это решается локами, тут же это должна быть операция самого сервера (как в sequence2.erl).
теперь понятно, спасибо, просто я смотрел с точки зрения клиента, раз он прочитал N (N=read(Sequence)), то и вернет N.
а тут речь про гонку на самом сервере.
К>"гонки" ловятся очень плохо
тут скорее
К>А jitter — это типа "дрожание" (т.е. получается что-то аля "добавление временного разброса"), т.е. надо делать много параллельных запросов и интервалы между ними должны быть случайными (дабы проверить как можно больше комбинаций) .
понятно, еще раз спасибо.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>