Параллельное расширение и блокировка - C # - PullRequest
0 голосов
/ 15 августа 2010

Я читаю отличную статью о параллельных расширениях Джо Албахари.Он говорит:

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

  1. Разделите его на маленькие куски.
  2. Выполните эти куски параллельно с помощью многопоточности.
  3. Соберите результаты по мере их появления, впоточно-ориентированный и производительный способ.

Хотя вы можете делать все это с классическими многопоточными конструкциями, это неудобно - особенно шаги разделения и сортировки.Еще одна проблема заключается в том, что обычная стратегия блокировки для обеспечения безопасности потоков вызывает много споров, когда многие потоки работают с одними и теми же данными одновременно.

Библиотеки PFX были специально разработаны для помощи в этих сценариях.

Мне интересно, как PFX уменьшает нагрузку?

AFAIK, потоки управляются операционной системой, а ОС отвечает за предоставление и снятие блокировок.Все остальное, как PFX, является абстракцией, которая хорошо обрабатывает блокировку и пытается выполнить работу с минимальной блокировкой.Я предполагаю, что это возможно даже при непосредственном манипулировании потоками и аккуратной фиксации, чтобы избежать напряжения.

Это правильно?Или есть лучший способ сделать потокобезопасную работу без использования блокировок?

1 Ответ

1 голос
/ 15 августа 2010

Много работы ушло на разделение PFX, а также на улучшение ThreadPool, чтобы иметь очереди для кражи работы.Между этими двумя исключается большое количество разногласий (по сравнению со стандартным подходом к очереди совместно используемых производителей и потребителей).

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