Re[91]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: Sinclair Россия https://github.com/evilguest/
Дата: 09.10.21 06:01
Оценка:
Здравствуйте, vdimas, Вы писали:


V>Или крайне простой велосипед — очередь.

V>Это зависит от способа представления вычислительных задач.
Можно обсудить оба способа.

V>Собсно, поэтому, если стоит задача разработки системы сложных блокировок, то опираться на даваемые операционкой ср-ва стоит с осторожностью, т.е. следует учитывать/измерять, насколько ср-ва ОС адекватны решаемой задаче. В обсуждаемой предметной области серверных приложений — неадекватны.

Ок, зачем тогда вы их начали обсуждать? Предлагаете заведомо неадекватное решение, да ещё и неполное?

V>Именно поэтому мейнстримом уже относительно давно для серверных приложений является оборачивание вычислительных задач в объекты-таски пользовательского уровня, с управлением очередями задач из юзверского (по отношению к операционке) кода.

V>Это основная причина, из-за которой я утверждал, что ключевые слова async/await в дотнете не нужны.
А какова будет нотация описания пользовательских задач? Руками переписывать всё в state machine?
Я не уверен, что это будет нагляднее, чем код с async/await.

Возвращаемся к главному вопросу: как выглядит код исполнения типичного запроса? Предположим, мы выполняем что-то вроде
select count(id) from sales s inner join city c on s.cityId=c.id where c.name = 'Севастополь' and s.Amount > 150

Можете набросать то, что будет исполняться движком СУБД? Если это будет императивный код с семафорами — что и когда будет захватываться и отпускаться.
Если это будет набор объектов-тасков — то какие это будут объекты-таски?

Что-то мне подсказывает, что вы опять отделаетесь общими словами.

V>И в чём у тебя проблема?

V>Если CONS способно связать пару узлов, то можно привязать и третий, и сорок третий.
Проблема — в деталях. Пока что у вас все рассуждения — уровня "процессор исполняет ассемблерные инструкции, поэтому нужно просто превратить программу в набор инструкций и их исполнить".

V>Забудь про базы и таблицы (это сильно мешает, смотрю), пронумеруй хоть от одного до ста некие уровни иерархий ресурсов и распиши себе.

Опять нумерация. Для каждого уровня иерархии потребуется свой объект ресурса. Вот вам кажется, что можно реализовать page lock так, как будто он блокирует сразу "пачку" единиц, а row lock их блокирует по одной.
Да, но это же только часть решения. В мире СУБД эта часть называется intent lock и да, перед захватом блокировки строки нужно захватить блокировку страницы. (Есть и альтернативные решения, но они слишком дорогие на практике и их никто не применяет).
Но вы-то пишете так, как будто это и есть решение для row lock, а меж тем строки — это отдельные ресурсы, и их захватывать надо тоже.
Причём очевидным образом эти ресурсы должны создаваться динамически: никто не создаёт заранее миллиарды семафоров для каждой строки в базе. И миллиарды очередей тоже заранее не создаёт.
Поэтому хоть захват блокировки, хоть постановка в очередь сопровождается отдельной операцией поиска/создания объекта, которая закрыта, естественно, ещё одной блокировкой.
То есть захват минимального row lock — это как минимум четыре интерлокед операции, и это на happy path, когда во всей системе ровно одна исполняемая транзакция.


V>Это потому что у тебя наблюдается хорошо заметная ломка, что лично меня улыбает.

Смешно.
V>Ты не привык рассуждать очередями задач, не привык расписывать управление задачами на очередях, для тебя, походу, является кощунством вообще думать в эту сторону, коль ты рассуждал в духе "а, ну это самописный семафор!".
Да при чём тут психология и кощунство? Вы рассуждаете в терминах некоторой конструкции, свойства которой полагаете очевидными. Меня всего лишь интересовало, как именно эта конструкция устроена.
Как устроен системный семафор, я и так знаю. Мне было непонятно, то ли вы просто не в курсе ошибки 87, то ли имеете в виду какую-то самодельную реализацию. Во втором случае интересовало то, как эта реализация устроена, т.к. рассуждать о свойствах неизвестно чего я не умею. Покажете устройство вашего семафора — есть что обсуждать. Не показываете — обсуждать нечего. Вот и всё.
А вы зачем-то тратите моё и своё время на обсуждение каких-то не имеющих отношения к делу банальностей.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.