переход от 32-битной XP к 64-битной Win7 - последствия потоков - PullRequest
1 голос
/ 23 июня 2011

В этом году мы перемещаем архитектуры ОС и процессоров.Наше текущее приложение не особенно поточно-ориентированное, однако оно работает в соответствии с текущими спецификациями.Мы также переходим на .net4.

Мы находимся в процессе переписывания приложения надлежащим образом, но это многолетний проект, и у нас пока нет выбора, кроме как переместить плохо кодированную систему.

У меня такой вопрос: кто-нибудь был в подобной ситуации?Как мы можем гарантировать, что мы стряхнем все проблемы, прежде чем мы начнем жить на новых спецификациях?Есть ли хороший способ уменьшить эти риски?Кроме того, каковы основные изменения в планировании потоков и поведении, которые мы должны опасаться в движении?Спасибо за любую помощь

Ответы [ 2 ]

2 голосов
/ 23 июня 2011

Как отметил Стив Таунсенд, не должно быть никаких существенных различий с парой предостережений:

  1. Переход от 32-битных к 64-битным может вызвать проблемы, потому что указатели только что стали больше. Это означает, что вы больше не можете использовать значения DWORD для хранения указателей.
  2. Vista и Win7 поддерживают гиперпоточность. Это означает, что они будут более эффективными при планировании задач на разных логических ядрах. Это может означать, что вы видите неожиданные переключения контекста, которые (как писал Стив) могут выявить существующие проблемы параллелизма в вашем приложении.
2 голосов
/ 23 июня 2011

Мне ничего не известно ни в ОС, ни в Framework, которые радикально изменили бы планирование потоков в существующем приложении.Самый большой риск, который я предвижу, заключается в том, что новые процессоры, вероятно, будут работать быстрее, чем те, на которых вы сейчас находитесь (более новые обычно равняются быстрее), и это изменит количество вашего кода, который может выполняться в каждом отрезке времени, который дается вашему процессу.Если один поток переходит в состояние ожидания, для других потоков будет доступно больше времени.Любые существующие ошибки неактивного потока могут проявляться чаще в результате таких изменений синхронизации.Или вы можете продолжать везти.Вы не упомянули об этом, но если вы переходите на многоядерное оборудование в первый раз, вы почти наверняка увидите больший параллелизм (и, следовательно, риск коллизии) внутри вашего процесса.

Для смягчения последствий на самом деле нетХорошее средство, кроме проверки общих данных / кода и надлежащей защиты всего, к чему можно получить доступ одновременно.Если вы столкнетесь с катастрофическими проблемами при тестировании (вы планируете выполнить полную нагрузку и регресс до развертывания, верно?), Вы могли бы рассмотреть какую-то «большую блокировку» в верхней части ваших потоков или соответствующие функции, чтобы код риска не мог пересекаться.дорожки со своими сверстниками.Это, вероятно, снизит производительность, но высокопроизводительный код, который постоянно падает, в любом случае не очень полезен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...