Плохая архитектура
Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
Пожалуйста, ознакомьтесь с правилами данного форума
-
- Маньяк
- Сообщения: 4706
- Зарегистрирован: 20 янв 2005, 19:11
Детали всегда имеют значение, но ими должен заниматься специально обученный человек, а когда один программист должен заботится обо всех деталях работы, то скорее всего он будет делать это плохо, т.к. нельзя одинаково хорошо знать такие различные аспекты работы.
Это так же как реляционные системы баз данных - не программистское это дело, заниматься администрированием и оптимизацией структуры БД. На одном и том же приложении она может меняться очень сильно, оставаясь прозрачной для приложения.
Это так же как реляционные системы баз данных - не программистское это дело, заниматься администрированием и оптимизацией структуры БД. На одном и том же приложении она может меняться очень сильно, оставаясь прозрачной для приложения.
- ajkj3em
- Маньяк
- Сообщения: 2063
- Зарегистрирован: 12 ноя 2006, 06:53
конечно можно. это разговор из серии "зачем оптимизировать код, когдаZy писал(а):Детали всегда имеют значение, но ими должен заниматься специально обученный человек, а когда один программист должен заботится обо всех деталях работы, то скорее всего он будет делать это плохо, т.к. нельзя одинаково хорошо знать такие различные аспекты работы.
можно добавить GHz" ... то есть ни о чем. устраивают вас пулы тредов в
рамках джавы - ради бога. оригинальный вопрос никакого отношения к
джаве не имел и вне джавы threading в high-performance серверах
используется крайне ограничено. in my experience естественно.
-
- Маньяк
- Сообщения: 4706
- Зарегистрирован: 20 янв 2005, 19:11
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
Нет, не дешевле во многих случаях. Более того, в данном случае удаение и даже утроение мегагерцы ни как не скажется на производительности сервера с архитектурой "one-thread-per-client". Здесь проблема в ресурсах. Это работает только при небольшом числе клиентов.Zy писал(а): Добавить мегагерцы в 99% ситуаций существенно дешевле, чем оптимизировать код, но это не тот случай.
Виноват, ... я не пояснил, что это был не реальный проект, а интервью по телефону с одними из гуру из очень навороченной фирмы в Миссиссаге (не прошёлZy писал(а): В данной ситуации проектирование идет не с того конца: надо было бы сначала выбрать решение, а потом под него архитектуру, а не наоборот.

Кроме того, есть у MS есть общие технологии в разработке серверных архитектур ( не одна, конечно), например, IOCPs. Это может быть использовано, как с сокетами, так и в равной степени с пайпами и файлами. Поэтому вполне можно говорить об архитектурах в целом.
-
- Маньяк
- Сообщения: 4706
- Зарегистрирован: 20 янв 2005, 19:11
Да, в 1% случаев. Но так как програм в мире пишется очень много, то 1% в штуках достаточно много.Нет, не дешевле во многих случаях.
Т.е. на компьютере intel 286 и intel p4 это будет работать с одинаковой скоростью?Более того, в данном случае удаение и даже утроение мегагерцы ни как не скажется на производительности сервера с архитектурой "one-thread-per-client".
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
Zy писал(а):Да, в 1% случаев. Но так как програм в мире пишется очень много, то 1% в штуках достаточно много.Нет, не дешевле во многих случаях.
Хотелось бы с тобой согласиться.

Ты ведь понял меня. Не так ли? Вопрос в том, что нужно стремиться к идеалу используя минимальное число объектов многозадачности:Zy писал(а):Т.е. на компьютере intel 286 и intel p4 это будет работать с одинаковой скоростью?Более того, в данном случае удаение и даже утроение мегагерцы ни как не скажется на производительности сервера с архитектурой "one-thread-per-client".
MS says.... CreateIOCompletionPort. ... So what should n be? In other words, what is a good number of threads to dispatch? Well, if your computations are CPU-bound, you should probably dispatch no more threads than there are processors in the machine you run the server application on. Passing 0 to the number of threads parameter will default to the number of processors, or you can use the GetSystemInfo system service to obtain the number. For I/O-bound operation, you can probably afford a higher degree of concurrency.
-
- Маньяк
- Сообщения: 4706
- Зарегистрирован: 20 янв 2005, 19:11
- aissp
- Маньяк
- Сообщения: 2710
- Зарегистрирован: 07 ноя 2005, 09:51
мне вот что неясТТно. Что делать если время ответа недетерминировано. Представим, что система ищет собственный вектора для матриц, размер которых неопределен. Ежели ето 3 на 3 - да ради бога можно на селекте (на люьом диспатч механизме) а ежеди 5 на 5? ОК - в данной задаче можно определить по размерности матрицы время счета, хотя вру - юзер задал мартицу 10 на 10, но она блин диагональная - вектора мы ему сразу отдадим...
Эта одна проблема
Что касается 1000 клиентов - ну зачем делать 1000 тредов? Достаточно сделать 10-к, и уменьшать или увеличивать в зависимости он надобностей:)
Ето я не на Саню наезжаю, а на екстримисткий взгляд - треды сакс, селект форева
Эта одна проблема
Что касается 1000 клиентов - ну зачем делать 1000 тредов? Достаточно сделать 10-к, и уменьшать или увеличивать в зависимости он надобностей:)
Ето я не на Саню наезжаю, а на екстримисткий взгляд - треды сакс, селект форева
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
Нельзя клиента держать в отдельном треде, пока тред блокирован блокирующей I/O операцией, например, ждём данных от клиента (а оператор ушёл покурить), или пытаемся в этом треде выполнить сложную обработку данных, запрошенных этим клиентом и только потом отправить данные клиенту в этом же треде.Zy писал(а):Зачем?Вопрос в том, что нужно стремиться к идеалу используя минимальное число объектов многозадачности
Чего держать тред, если для этого клиента в данный момент нет данных для обработки?
-
- Маньяк
- Сообщения: 4706
- Зарегистрирован: 20 янв 2005, 19:11
При большом количестве клиентов не надо открывать тред на клиента, тред(ы) надо открывать на события.
В реальной жизни, кстати, так и происходит: например, в большом магазине типа IKEA есть консультанты, которые помогают выбрать товар (треды consulting) и меньшее по сравнению с консультантами количество кассиров (треды payment). Если магазин маленький, то консультант может быть в то же время и кассиром.
Количество открытых тредов определяется нагрузкой на сервер и определяется динамически(сервера приложений в j2ee).
В реальной жизни, кстати, так и происходит: например, в большом магазине типа IKEA есть консультанты, которые помогают выбрать товар (треды consulting) и меньшее по сравнению с консультантами количество кассиров (треды payment). Если магазин маленький, то консультант может быть в то же время и кассиром.
Количество открытых тредов определяется нагрузкой на сервер и определяется динамически(сервера приложений в j2ee).
Я не знаю, как это происходить у MS, но в java/unix есть каналы, ничего ждать не надо.ждём данных от клиента
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
-
- Маньяк
- Сообщения: 2841
- Зарегистрирован: 20 фев 2003, 09:15
- Откуда: Vancouver
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
Для таких длительных операций есть такая неплохая идея (не моя):aissp писал(а):мне вот что неясТТно. Что делать если время ответа недетерминировано. Представим, что система ищет собственный вектора для матриц, размер которых неопределен. Ежели ето 3 на 3 - да ради бога можно на селекте (на люьом диспатч механизме) а ежеди 5 на 5? ОК - в данной задаче можно определить по размерности матрицы время счета, хотя вру - юзер задал мартицу 10 на 10, но она блин диагональная - вектора мы ему сразу отдадим...
- клиентский запрос : посчитать матрицу, матрица такая-то.
- сервер ответ : матрица большая; погодь маленько.
- клиент запрос ( в отдельном треде клиента в лупе с некоторым тамвайт) : уже посчитал?
- сервер ответ: почти, погодь.
- клиент запрос : уже посчитал?
- сервер ответ : да, вот результаты.
-
- Маньяк
- Сообщения: 4706
- Зарегистрирован: 20 янв 2005, 19:11
Ну так вопрос изначально был - один тред или много. Твои парни предложили один, и ты с ними сейчас согласен.Так а я о чём?
Молодой, зеленый ещеЧитал читал - так ни хрена и не въехал - зачем разводить тредов больше чем процессоров?

Во-первых, откуда ты знаешь, сколько там будет процессоров. Но это даже неважно, т.к. есть "во-вторых": кто сказал, что все обработчики выполняются с одинаковой скоростю, которая зависит только от скорости процессора? А если обработчик ждет ответа от БД, которая вообще на другом компе, то все должны его ждать?
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
Об этом сказано было. Два треда на одно устройство - идеальный вариант. Фактически получится чуть больше. Правильное решение, см, как ajkj2em делает. (выше в нитке)Vovchik писал(а):Да блин. Читал читал - так ни хрена и не въехал - зачем разводить тредов больше чем процессоров? Я понимаю когда есть 128 процессоров - лепим 128 тредов. А когда один процессор?