109: (Default)
[personal profile] 109
а какие существуют стандартные технологии, методологии и практики предотвращения дедлоков? дайте ссылочку или на пальцах расскажите.

(no subject)

Date: 2005-01-18 12:23 pm (UTC)
From: [identity profile] 109.livejournal.com
если нет дедлоков (с чего весь разговор и начался), то использование конструкции
lock(queue){queue.add(myObj)}
гарантирует, что вставка завершится. асинхронные же сокеты вряд ли могут служить тут хоть какой-нибудь аналогией, поскольку там и цели другие, и принципы работы, и вообще всё. из моей логики, заключающейся в том, что вставка валидного объекта в валидную очередь, возвращающая FAIL - это хуёвый дизайн, ненужность асинхронного ввода-вывода никак не следует.

далее, lock() процессор не ест, так что "поделать что-нибудь другое" могут остальные треды. а наш занят тем, что в очередь вставляет. вы представляете себе, насколько это решение с FAIL усложняет код, пользующийся такой "очередью"?

(no subject)

Date: 2005-01-18 12:40 pm (UTC)
From: [identity profile] cousin-it.livejournal.com
Locking - очень медленная операция. Ее хочется избежать. Насколько я понимаю ограничения этой задачки - systems programming как-никак, тормозить нельзя - malloc тоже хочется по мере возможности избегать. Если malloc запрещен вообще, то волей-неволей иногда придется возвращать FAIL.

Если очень хочется, можно попробовать сейчас придумать вариант получше. Граничные условия:

1) по минимуму malloc
2) нет locking
3) не возвращается FAIL на put
4) более-менее линейное расположение данных в памяти

У меня что-то пока не очень получается. Впрочем, я вообще не слишком умный.

(no subject)

Date: 2005-01-18 01:12 pm (UTC)
From: [identity profile] 109.livejournal.com
ну, malloc надо просто делать каждый раз жаднее в два раза. а линейное - это уж как memory manager даст. я вообще на сишарпе пишу, так что никаких маллоков :-)

(no subject)

Date: 2005-01-18 01:16 pm (UTC)
From: [identity profile] cousin-it.livejournal.com
Эта идея сразу приходит. Маллок маллоком, но как предлагается данные на новое место двигать, не используя lock? А если он используется в put, то в get мы будем уже вынуждены его использовать.

(no subject)

Date: 2005-01-18 01:33 pm (UTC)
From: [identity profile] cousin-it.livejournal.com
У меня вопрос off-topic. Скажите, а Вы на C# пишете потому что нравится или потому что corporate policy? Если "нравится", то почему? Если corporate policy, то почему? Это не flamebait, сам я ничо рекламировать не хочу, просто интересно.

(no subject)

Date: 2005-01-18 02:01 pm (UTC)
From: [identity profile] 109.livejournal.com
нравится. отличия от С++ и Дельфи очевидны (хотя я могу остановиться на них поподробнее, если вам интересно). почему не на джаве - объяснить труднее, но к джаве у меня стойкое отвращение. не к джаве как языку, собственно, а к тому, что вокруг. ни одной IDE приемлемой для джавы я не видел (хотя вот IDEA-ю хвалят, но теперь уж поздно на неё смотреть). да и вообще... куча мелочей в джаве раздражает, а те же мелочи в дотнете сделаны по уму, и это приятно.

(no subject)

Date: 2005-01-19 01:24 am (UTC)
From: [identity profile] cousin-it.livejournal.com
То есть "Java done right". Спасибо.

(no subject)

Date: 2005-01-19 05:47 am (UTC)
From: [identity profile] 109.livejournal.com
а почему вы спросили?

(no subject)

Date: 2005-01-19 12:36 pm (UTC)
From: [identity profile] cousin-it.livejournal.com
Хочется представить себе, какая будет экосистема вокруг CLR лет через пять. Самому мне в это, надеюсь, лезть не придется, а посмотреть со стороны интересно.

(no subject)

Date: 2005-01-19 01:41 pm (UTC)
From: [identity profile] 109.livejournal.com
оно улучшается стремительным домкратом, куда быстрее, чем джава. новая Visual Studio - это просто песня. они даже украли у меня пару архитектурных решений и захардкодили их :-)

(no subject)

Date: 2005-01-19 02:17 pm (UTC)
From: [identity profile] cousin-it.livejournal.com
Я смотрю не с точки зрения разработки - я слышал, там действительно рай для разработчика. Я пытаюсь смотреть с точки зрения экосистемы. Меня слегка пугает идея "платформы .Net".

Например, если я пишу сервлеты на Java, то я могу выбирать из кучи серверов (многие из которых open source), соответствующих спецификации Servlet.

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

Аналогичная ситуация с JDBC и так далее.

(no subject)

Date: 2005-01-20 07:44 am (UTC)
From: [identity profile] 109.livejournal.com
боюсь, что я не совсем понял про спецификации, и особенно про jdbc.

(no subject)

Date: 2005-01-20 11:23 am (UTC)
From: [identity profile] cousin-it.livejournal.com
JDBC - это сановская спецификация на драйверы. Не реализация.

J2EE - это спецификация. У нее есть, например, open source реализация JBoss.

Аналогично - JMX, Servlets/JSP и так далее. Есть не-сановские компиляторы Java. Есть не-сановские IDE. Есть не-сановские библиотеки, которые стали де-факто стандартом - например, log4j.

Модель Sun: выпустить spec и reference implementation. Модель Microsoft - выпустить реализацию, которая сама по себе является spec.

(no subject)

Date: 2005-01-20 11:47 am (UTC)
From: [identity profile] 109.livejournal.com
JDBC - это сановская спецификация на драйверы

сановская модель хороша только в теории. на практике получается, что спецификации описывают не всё и мы имеем, например, implementation-specific deployment descriptors, что делает процесс перехода, например, с JBOSS на Weblogic невыносимо болезненным. спецификация сервлетов - это вообще просто набор интерфейсов, дотнет в этом плане ничем не хуже. ну и, наконец, девелоперу с майкрософтовскими продуктами работать в основном удобно, а с продуктами open source в основном неудобно. чтобы понять, почему, достаточно задуматься над силами, движущими майкрософтовским девелопером и опенсорсным девелопером.

тьфу, опять повёлся на дискуссию о победе разума над здравым смыслом.

(no subject)

Date: 2005-01-20 03:48 pm (UTC)
From: [identity profile] cousin-it.livejournal.com
Прошу прощения... я с самого начала сказал, что хочу не спорить, а услышать Вашу точку зрения =)

(no subject)

Date: 2005-01-18 12:50 pm (UTC)
From: [identity profile] cousin-it.livejournal.com
lock(queue){queue.add(myObj)}

гарантирует, что вставка завершится.


Зато при Вашем подходе писатель может заставить читателя голодать вечно. Понимаю, что nitpick, но все же =))

(no subject)

Date: 2005-01-18 01:07 pm (UTC)
From: [identity profile] 109.livejournal.com
ну почему... после вставки писатель будет занят получением следующего myObj... можно ещё там насильно yield написать.

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

(no subject)

Date: 2005-01-18 01:15 pm (UTC)
From: [identity profile] cousin-it.livejournal.com
Я думал, Вы это сразу заметили =))

Очередь с одним писателем - это типичный случай. Более того, когда писатель один и читатель один - это тоже типичный случай, внутри первого типичного случая.

Конечно, если о скорости не беспокоиться, можно на уровне системы реализовать (например) process pipe, которая будет лочиться на каждое чтение/запись. Тогда эти локи и будут ограничивающим фактором для

ls -l | grep "ляля" | more

или тому подобной фигни...

Впрочем, на вкус и цвет товарищей нет =)

(no subject)

Date: 2005-01-18 01:25 pm (UTC)
From: [identity profile] 109.livejournal.com
ну, у меня писатель один, а читателей много, так что я всё под этим углом рассматриваю :-)

(no subject)

Date: 2005-01-18 01:27 pm (UTC)
From: [identity profile] cousin-it.livejournal.com
Тогда

Rewriting get() to be safe for multiaccess. We need to isolate getPoint and update it successfully. This implies we need to synchronize the get() function on getPoint, and synchronize the put() function on putPoint. They should not both synchronize on the same monitor, as this may result in processes missing a relevant notify.

Profile

109: (Default)
109

March 2019

S M T W T F S
     12
3456789
101112131415 16
17181920212223
24252627282930
31      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags