|
|
|
Альтернативы RealThinClient
|
|||
|---|---|---|---|
|
#18+
DmSer, А с чего ты взял что все это делается в них "в рамках одного потока"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2019, 10:33 |
|
||
|
Альтернативы RealThinClient
|
|||
|---|---|---|---|
|
#18+
Vlad F DmSer, А с чего ты взял что все это делается в них "в рамках одного потока"? Я лишь написал, эти фреймворки могут держать тысячи подключений в рамках одного потока. Может сотни. Вопрос не в этом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2019, 10:40 |
|
||
|
Альтернативы RealThinClient
|
|||
|---|---|---|---|
|
#18+
DmSer, Тысячи (одних курьеров) подключений в рамках КАКОГО ТАКОГО одного потока? И, вообще, разбил бы ты свой исходный мегавопрос на ряд простых попроще и задавал бы их по одному. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2019, 10:53 |
|
||
|
Альтернативы RealThinClient
|
|||
|---|---|---|---|
|
#18+
Vlad F DmSer, Тысячи (одних курьеров) подключений в рамках КАКОГО ТАКОГО одного потока?. Не важно. Пусть будет main thread. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2019, 11:02 |
|
||
|
Альтернативы RealThinClient
|
|||
|---|---|---|---|
|
#18+
DmSer, Важно. Я же тебя к этому и подвожу, с какой стороны thread имеется ввиду? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2019, 11:04 |
|
||
|
Альтернативы RealThinClient
|
|||
|---|---|---|---|
|
#18+
Vlad F DmSer, Важно. Я же тебя к этому и подвожу, с какой стороны thread имеется ввиду? Не понял вопроса. Они с разных сторон бывают? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2019, 11:16 |
|
||
|
Альтернативы RealThinClient
|
|||
|---|---|---|---|
|
#18+
DmSer, Бывают. Иногда.)) Но что то я уже начал сомневаться, - мы двухзвенку или трехзвенку обсуждаем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2019, 11:25 |
|
||
|
Альтернативы RealThinClient
|
|||
|---|---|---|---|
|
#18+
Vlad F DmSer, Бывают. Иногда.)) Но что то я уже начал сомневаться, - мы двухзвенку или трехзвенку обсуждаем? Мне интересна организация веб-сервера на асинхронном фреймворке, но чтобы он не просто hello world в ответ отсылал, но и запросы к бд делал, работал с файлами и обращался к другим микросервисам . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2019, 11:42 |
|
||
|
Альтернативы RealThinClient
|
|||
|---|---|---|---|
|
#18+
DmSer, Так это трехзвенка все таки, получается, или нет?)) По кругу ходим, - с чего ты взял, что то на стороне веб-сервиса все это должно делаться в одном на все про все потоке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2019, 12:23 |
|
||
|
Альтернативы RealThinClient
|
|||
|---|---|---|---|
|
#18+
Vlad F DmSer, Так это трехзвенка все таки, получается, или нет?)) По кругу ходим, - с чего ты взял, что то на стороне веб-сервиса все это должно делаться в одном на все про все потоке? Наверное трехзвенка: Клиент (браузер) - Сервер - СУБД/микросервисы. Допустим, 10000 клиентов по http решили одновременно отправить запрос на сервер. Сервер для обработки каждого из запросов обращается к СУБД. СУБД находится на другом компьютере на другой стороне земного шара (Ping = 100 мс). Из-за длительного пинга каждый запрос к СУБД условно занимает 1 секунду (хреновый случай, когда каждый запрос нужно предварительно препарировать, а это ещё куча лишних сетевых запросов). Вопрос: через сколько времени наши 10000 клиентов увидят ответы на свой запросы (например, при использовании RTC / ICS / mORMot)? Если эти фреймворки асинхронные, то в идеале, они как-то должны уметь и с удалённой СУБД обменяться асинхронно, не плодя 10000 потоков лишь для ожидания ответа от СУБД. Каким образом они будут ожидать ответа от удалённой СУБД? а) асинхронно (например через порты завершения ввода/вывода). В этом случае не должны создаваться никакие лишние потоки, не затрачиваются лишние ресурсы (ОЗУ, вирт. память, процессор). Все клиенты увидят ответ одновременно (спустя 1 секунду). Однако в этом случае разработка сильно осложняется, т.к. мало того, что нам нужно писать асинхронный код обмена с клиентами, так ещё нужно писать асинхронный код обмена с СУБД. б) асинхронно, но за счёт создания 10000 доп. потоков (лишь для ожидания ответа от СУБД). В этом случае, если программа 32-битная, то на создание 10000 потоков может не хватить виртуальной памяти. Значительные вычислительные ресурсы тратятся на создание большого числа потоков. В этом случае разработка также сильно осложняется, т.к. мало того, что нам нужно писать асинхронный код обмена с клиентами, так ещё нужно писать асинхронный код обмена с СУБД. в) асинхронно, но за счёт создания пула из нескольких доп. потоков, например 100 (для ожидания ответа от СУБД). В этом случае, первые 100 счастливчиков получат ответ через 1 секунду, следующие 100 ещё через 1 сек и т.д. В этом случае разработка также сильно осложняется, т.к. мало того, что нам нужно писать асинхронный код обмена с клиентами, так ещё нужно писать асинхронный код обмена с СУБД. г) тупо блокировать поток, в котором осуществляется обмен с 1000 клиентов. Это самый грустный вариант. Первый клиент получит ответ через 1 сек, следующий ещё через 1 сек и т.д., пока у клиентов не возникнет ошибка таймаута. Тогда уж лучше писать на Indy. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2019, 15:10 |
|
||
|
Альтернативы RealThinClient
|
|||
|---|---|---|---|
|
#18+
DmSer А может кто-нибудь пояснить, каким образом все эти асинхронные фреймворки умудряются держать тысячи подключений в рамках одного потока и при этом работать с файлами и базами данных? Ведь если я обращаюсь к файлу, или выполняю запрос к БД, то эта операция может длиться несколько секунд! В этом случае обмен со всеми подключениями замораживается? Или же в этих фреймворках под капотом имеются свои функции работы с файлами и базами данных, которые и не создают кучу доп. потоков и не замораживают поток, из которого произошёл вызов из контекста подключения (но при этом приостанавливают выполнение кода, который такую функцию вызвал)? Есть ли в них такие волшебные функции для работы с Firebird? Никакой магии, работа с БД в потоках. Хотя сейчас движки постепенно добавляют асинхронность, но скармливание потоку остается классическим методом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2019, 09:56 |
|
||
|
Альтернативы RealThinClient
|
|||
|---|---|---|---|
|
#18+
Василий 2 Никакой магии, работа с БД в потоках. Хотя сейчас движки постепенно добавляют асинхронность, но скармливание потоку остается классическим методом. Это похоже на вариант б) или в)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2019, 12:50 |
|
||
|
Альтернативы RealThinClient
|
|||
|---|---|---|---|
|
#18+
б) асинхронно, но за счёт создания 10000 доп. потоков (лишь для ожидания ответа от СУБД). В этом случае, если программа 32-битная, то на создание 10000 потоков может не хватить виртуальной памяти. Значительные вычислительные ресурсы тратятся на создание большого числа потоков. В этом случае разработка также сильно осложняется, т.к. мало того, что нам нужно писать асинхронный код обмена с клиентами, так ещё нужно писать асинхронный код обмена с СУБД. Ну, 32 разрядный сервер это уже лет пять как несерьезно. Затраты на создание потоков незначительны по сравнению с затратами на запрос, если он длительный; ну а если он короткий, то уже в дело вступает пул потоков/соединений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2019, 14:35 |
|
||
|
Альтернативы RealThinClient
|
|||
|---|---|---|---|
|
#18+
Василий 2 Ну, 32 разрядный сервер это уже лет пять как несерьезно. Затраты на создание потоков незначительны по сравнению с затратами на запрос, если он длительный; ну а если он короткий, то уже в дело вступает пул потоков/соединений. Всё то же самое и у Indy :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2019, 15:19 |
|
||
|
|

start [/forum/topic.php?fid=58&gotonew=1&tid=2038844]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
152ms |
get topic data: |
7ms |
get first new msg: |
4ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 471ms |

| 0 / 0 |
