2010-01-28 3 views
32

Я изучаю Multi Threading на данный момент, на C#, но, как и во всем обучении, мне нравится изучать лучшие практики. В настоящий момент область кажется нечеткой. Я понимаю основы, и я могу создавать потоки.Multi Threading

Что следует учитывать при создании многопоточных приложений. Существуют ли какие-либо установленные правила или рекомендации, о которых я должен знать? Или что-нибудь помнить, чтобы избежать скольжения вверх по линии?

Спасибо за ответы.

+1

Если вы используете C#, вам следует рассмотреть возможность использования параллельной библиотеки задач. Это позволяет вам думать о задачах и барьерах, а не о потоках и блокировках. Это улучшает абстракцию. –

+0

@Ade Miller: Это отличный совет. Я добавлю, что вы также можете использовать TPL и PLINQ в .Net3.5, установив Reactive Extensions: http://msdn.microsoft.com/en-us/ devlabs/ee794896.aspx –

ответ

33

В дополнение к MSDN Best Practices, я добавлю:

  1. Не создавайте свои темы. Предпочитает использовать ThreadPool (или новые задачи Task Parallel Library). Управление собственной нитью редко, если вообще когда-либо, правильное дизайнерское решение.
  2. Будьте осторожны с вопросами, связанными с пользовательским интерфейсом. Control.Invoke (Windows Forms) и Dispatcher.Invoke (WPF), или использовать SynchronizationContext. В настоящее время с сообщением/отправлением
  3. При необходимости используйте BackgroundWorker class.
  4. Попробуйте сохранить синхронизацию с минимальным
  5. с помощью замков Убедитесь синхронизировать все, что требует синхронизации
  6. Favor методы в Interlocked class, когда это возможно за замок

После того, как вы получите более продвинутые, и пытаясь оптимизировать, другие вещи, которые нужно искать:

  1. Остерегайтесь false sharing. Это особенно проблематично при работе с массивами, так как каждый массив записывает в любой элемент массива, включает проверку границ в .NET, что фактически вызывает доступ к массиву около элемента 0 (непосредственно перед элементом 0 в памяти). Это может вызвать перфекционизм. резко спуститься вниз.
  2. Остерегайтесь проблем с закрытием, особенно при работе в ситуациях с циклом. Ошибки могут возникать, если вы закрываете переменную в неправильной области при создании делегата.
9

MSDN - Managed Threading Best Practices

Это MSDN статья делает очень хорошую работу в коснувшись областях опасности и дают лучшие практики управления/работе вокруг этих областей.

2

Есть ли вещи, о которых вы должны знать? Конечно.

Опасности:

Полезные и интересная статья может быть найдена here

2

Я настоятельно рекомендую начать с переваривания этого: http://www.albahari.com/threading/.

+0

Хорошо, что вы это придумали. Я напечатал этот 80-страничный PDF-файл, и сейчас я его прохожу. –