Случайно обнаружил https://github.com/pharo-project/threadedFFI-Plugin . Сперва немного порадовался, потом стал читать https://github.com/pharo-project/threadedFFI-Plugin/wiki/Using-with-UFFI и был шокирован. Или я чего-то не понимаю, или эта штука малополезна. In the current state, TFFI supports three running strategies:
Первая бесполезна вообще, третью я не очень понимаю, но по виду тоже бесполезна. Есть смысл говорить о второй, которая кажется чуть более перспективной, но лишь чуть. Положим, есть Seaside-приложение. Без TFFI, если оно вызовет что-то долгоиграющее, зависнут все клиенты. Стратегия TFWorker, если работает только per library, приведёт примерно к тому же. Обращение к СУБД второго юзера станет в очередь и будет там находиться, пока обращение первого юзера не выполнится. Да, те процессы, которые не обращаются к базе, будут работать. Но поскольку каждое обращение к веб-странице порождает запрос к базе, все юзеры будут висеть. -- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group". Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email]. Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/sugr/49cd579f-268a-43e0-af2a-95ce1feab760n%40googlegroups.com. |
Да, на слайдах ( https://www.slideshare.net/esug/nonblocking-strategies-for-ffi , страница 10, у меня доступно только через VPN) рассматривается Стратегия 1 (Thread per callout). Во-первых, "рассматривается" и "реализовано" не одно и то же. Во вторых, в СУБД-ных (DB2 и Oracle как минимум) все вызовы одного коннекта должны быть в одной нити. То бишь, если Smalltalk-процесс сделал вызов СУБД-шной библиотеки в нити T, следущий вызов тоже должен быть в нити T. Для небольшого (несколько сотен; то бишь не Twitter с Facebook, а что-то вроде корпоративного) приложения можно было бы просто ассоциировать ST-процесс и внешнюю нить.
On Monday, August 31, 2020 at 11:46:11 AM UTC+5 vvm13xyz xyz wrote:
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group". Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email]. Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/sugr/28244ef2-f8ed-40ca-bad0-37d2526000b0n%40googlegroups.com. |
пн, 31 авг. 2020 г. в 09:19, vvm13xyz xyz <[hidden email]>: Да, на слайдах ( https://www.slideshare.net/esug/nonblocking-strategies-for-ffi , страница 10, у меня доступно только через VPN) рассматривается Стратегия 1 (Thread per callout). Во-первых, "рассматривается" и "реализовано" не одно и то же. Во вторых, в СУБД-ных (DB2 и Oracle как минимум) все вызовы одного коннекта должны быть в одной нити. Как-то это требование не кажется реальным. Но, вероятно, я вас не так понимаю. Обычно в приложениях используется пул соединений, где разные потоки переиспользуют одни и те же объекты соединений. Я работал с ораклом через яву и http запросы явно проходили через пул. Может быть, глубоко внутри jdbc-объекты оракла работали через специальный поток, но я не припомню чтобы профайлер это показывал. Если все же верно то, что я говорю, то доступ к соединению просто должен быть синхронизирован. Для этого специальной поддержки VM не требуется. То бишь, если Smalltalk-процесс сделал вызов СУБД-шной библиотеки в нити T, следущий вызов тоже должен быть в нити T. Для небольшого (несколько сотен; то бишь не Twitter с Facebook, а что-то вроде корпоративного) приложения можно было бы просто ассоциировать ST-процесс и внешнюю нить. -- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group". Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email]. Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/sugr/CAG0zXM5av4aanU9puS1wvgVjZooU6Smvf-HaTJh81UX7Fx6TJQ%40mail.gmail.com. |
In reply to this post by vvm13xyz xyz
пн, 31 авг. 2020 г. в 07:46, vvm13xyz xyz <[hidden email]>:
Первая очень даже полезна. Threaded FFI может стоить очень дорого, например, для вызова большого кол-ва мат. функций в какой-нибудь либе. Идея этих стратегий - это иметь возможность по разному выполнять FFI вызов в зависимости от нужд конкретного приложения. Первый подход требуется, когда необходима максимальная производительность.
Третья стратегия это обязательное требование для MacOS и также, вероятно, для андроида. Там есть какие-то ограничения, откуда можно получать и обрабатывать события операционки. Для конечного пользователя это, вероятно, будет не нужно. Благодаря этой фиче мы получим полностью Idle Pharo, которая по-настоящему спит, если ничего не происходит, и аккумулятор не расходуется. Сейчас простаивающий имидж использует около 0.1-1% процессорного времени. TFMainThreadRunner - это конечно, не единственное, что для этого требуется, но необходимое.
Нет. Здесь все будет как надо. Можно будет сконфигурировать пул внешних OS потоков для конкретных внешних вызовов. Точно не знаю детали и на какой оно стадии. Но ваш сценарий это именно то, что хотят здесь разрешить
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group". Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email]. Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/sugr/CAG0zXM7%3DZ7er6ajRWDLvWFGjAYZ5hHwYWnfoF-PaqUiYTZpYKQ%40mail.gmail.com. |
Free forum by Nabble | Edit this page |