Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как работает одно и тоже приложение на разных процессорах / 8 сообщений из 8, страница 1 из 1
21.06.2006, 04:14
    #33804173
amids
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает одно и тоже приложение на разных процессорах
Столкнулся с такой проблемой:
есть приложение на фреймворке 2.0 в виде виндовс-сервиса, которое инициализирует 4 потока:
1 - слушает порт;
2 - с определенным интервалом проверяет сообщения на РОР3 сервере;
3 - с определенным интервалом читает новые задачи из таблицы задач в БД SQL 2005, при поступлении новых задач сканирует папку с длл-ками и запускает метод одной из них для выполнения нужной задачи.
4 - с определенным интервалом читает папку с длл-ками и запускает метод одной из них.

Все работало отлично на двухпроцессорном Ксеоне и на большинстве других доступных в поле зрения машинах до тех пор, пока клиент не создал копию приложения и БД на другую машину с одним двухядерным ксеоном: потоки инициализируются, но работают все, кроме третьего потока. По логам видно, что он пытается прочитать информацию о задаче из БД и на этом глохнет.

Клиент утверждает, что причина в "улучшенной многопоточности" новой тачки, фреймворк не умеет работать на таком проце... Мне кажется, что что-то намудрил при установке СКЛ или винды их специалист.

Помогите разобраться. Клиент очень нервничает :(
...
Рейтинг: 0 / 0
21.06.2006, 14:28
    #33805691
Lelikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает одно и тоже приложение на разных процессорах
.NET Framework вообще не в курсе, какой там процессор и скока там ядер, вернее в курсе, но пользуется он потоками ОС.

IMHO, дело в том, что криво установлен MSSQL...

________________________________________________________
Глюк - это высокоорганизованная система не поддающихся определению частиц
...
Рейтинг: 0 / 0
21.06.2006, 15:14
    #33805932
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает одно и тоже приложение на разных процессорах
amids...Помогите разобраться. Клиент очень нервничает :(

смахивает на не правильное программирование многопоточных приложений. Скорее всего есть асинхронная фаза, действия в которой подразумеваются синхронные. Тут и едет Ваша логика.

Попробуйте выкинуть весь "баласт" и оставить только скелет многопоточности. Поставте слипы эмулирующие различные задержки и посмотрите результат...Можете запостить сюды сам скелет... Уделите внимание синхронным фазам подъёма и опускания каждой из ниток.. Так же не мешает прогнать стрэсс тесты на однопроцессорной машинки. Фрамеворк, как тут правильно сказали, настолько высок от указанных Вами проблем - что вряд ли собака порылась в нём..Хотя ляпов у милкософта было достаочно в первой версии (и ошипка студии "65535" и много чаво ышо)...продукт сырой и допускать его глючность - можно, но вероятность достаточно не высокая...

проблемы с сикволом - маловероятны (как мне икается)... Если сработка секьюритей была бы (по поточно она строится) - то она бы не дышала бы у Вас изначально...

с уважением
(круглый)
...
Рейтинг: 0 / 0
21.06.2006, 16:59
    #33806384
amids
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает одно и тоже приложение на разных процессорах
Спасибо за реакцию.
Самый большой прикол в том, что приложение работает на ура на всех других машинах, где пробовали его установить. Даже на той, где стоят два таких же процессора, как и на той машине, где не работает.
Потоки между собой никаким образом не взаимосвязаны.
...
Рейтинг: 0 / 0
21.06.2006, 18:15
    #33806680
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает одно и тоже приложение на разных процессорах
amids..Самый большой прикол в том, что приложение работает на ура на всех других машинах, где пробовали его установить. Даже на той, где стоят два таких же процессора, как и на той машине, где не работает.
Потоки между собой никаким образом не взаимосвязаны.

1) обычно разное поведение на разных машинах и(или) при изменении внешних условий работы влияет на не совсем корректно построенный код. это по опыту. скажем так - я бы поставил бы это на первое место по приоритетам "где искать"...
2) не связаны у Вас явно ? А не явно ? Ведь Вы написали, что как минимум 2 потока используют файловый ввод вывод - а это уже пересечение логик. Попробуйте локализовать проблему - закоменнтируйте (или не запускайте) определённые потоки. В потоках попробуйте убрать всё то, что обращаеться к ресурсам или во внешний мир... при этом время жизни потоков постарайтесь оставить такой-же.

с уважением
(круглый)
...
Рейтинг: 0 / 0
21.06.2006, 19:15
    #33806837
amids
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает одно и тоже приложение на разных процессорах
kolobok0 amids..Самый большой прикол в том, что приложение работает на ура на всех других машинах, где пробовали его установить. Даже на той, где стоят два таких же процессора, как и на той машине, где не работает.
Потоки между собой никаким образом не взаимосвязаны.

1) обычно разное поведение на разных машинах и(или) при изменении внешних условий работы влияет на не совсем корректно построенный код. это по опыту. скажем так - я бы поставил бы это на первое место по приоритетам "где искать"...
2) не связаны у Вас явно ? А не явно ? Ведь Вы написали, что как минимум 2 потока используют файловый ввод вывод - а это уже пересечение логик. Попробуйте локализовать проблему - закоменнтируйте (или не запускайте) определённые потоки. В потоках попробуйте убрать всё то, что обращаеться к ресурсам или во внешний мир... при этом время жизни потоков постарайтесь оставить такой-же.

с уважением
(круглый)

Сделал так, как Вы написали: отключил все потоки, кроме проблемного.
Вот еще подробности:
Поток забирает из БД список задач обычным селектом:
Select id from queueMessages where (status='new') and (postTime < @when)
где @when - текущее время.
Сиквел возвращает таблицу, сервис видит, что записей больше 0 и вызывает метод другого класса, который пытается сделать селект одной из записей
Select * from queueMessages where id=40
Запрос поступает на сиквел, но на этом все заканчивается.
...
Рейтинг: 0 / 0
21.06.2006, 19:54
    #33806917
amids
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает одно и тоже приложение на разных процессорах
Спасибо всем, проблема была не в процессоре и не в ядрах, а в региональных настройках винды, сиквела и самого фреймворка.

Фреймворк получал дату из стрингового поля БД и пытался его пропарсить. Не получалось, так как формат даты не совпадает.

Осталось разобраться в региональных настройках самого фреймворка.
...
Рейтинг: 0 / 0
22.06.2006, 14:12
    #33808759
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает одно и тоже приложение на разных процессорах
amidsСпасибо всем, проблема была не в процессоре и не в ядрах, а в региональных настройках винды, сиквела и самого фреймворка....


немного в догонку...Вы писали...
Код: plaintext
1.
Select id from queueMessages where (status='new') and (postTime < @when)

где @when - текущее время.
Сиквел возвращает таблицу, сервис видит, что записей больше 0 и вызывает метод другого класса, который пытается сделать селект одной из записей

Код: plaintext
1.
Select * from queueMessages where id= 40 

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

с уважением
(круглый)
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как работает одно и тоже приложение на разных процессорах / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]