Многопотативный или резьба на основе сообщений или резьба для короткого и необычного действия?

StackOverflow https://stackoverflow.com/questions/3135392

Вопрос

В настоящее время я использую RetLang для многопотативной программы на основе сообщений в .NET, который является отличной библиотекой. У меня больше нет явных замков, каждый поток делает свой собственный бизнес, управлять его частью приложения и общения с другими потоками через сообщения.

Теперь я должен реализовать особенность моего приложения, которые также могут иметь свой собственный издатель / подписчик. Единственная проблема в том, что эта нить на самом деле будет делать очень мало работы. Ожидается, что он получит сообщение от издателя каждые 10 минут или около того. Когда сообщение получено, он будет делать некоторую работу, но ничего, что следует занять более чем нескольких сотен миллисекунд.

Поэтому я начал задаваться вопросом, если спящий поток 99,9% времени был на самом деле хорошим выбором. Там пул резьбы для такого рода эксплуатации, но поскольку у меня нет контроля над тем, какие потоки мои сообщения будут получены, я должен прибегать к уродливым, безрезультатно замки.

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

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

Это было полезно?

Решение

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

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

Другие советы

Это звучит как идеальный сценарий для использования Task. Отказ Они используют пул резьбы по умолчанию внизу, но имеют гораздо более развитую API.

Разве вы не можете использовать ретланг PoolFiber за это? Это не поддерживается выделенной нитью, как ThreadFiber Но вместо этого от .NET ThreadPool. Это означает, что вы можете продолжать использовать одинаковую семантику RetLang, которую вы используете на протяжении всего вашего приложения, не поддерживая нить простоя.

Хотя каждое действие на бассейне может выполняться в отдельном потоке пула, действия для определенного POUSFIBER выполняются последовательно, а не параллельно, только один резьб пула за раз.

Бассейнfiber должен делать то, что вы ищете.

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

Я бы сказал, что имея выделенную нить для получения этих сообщений. Я мог бы даже сказать, что это будет предпочтительный метод. Это не так, как вы просто создаете темы Willy-Nilly или что-то подобное. Мы говорим о одной дополнительной резьбе здесь, и она не будет потреблять ресурсы многих (возможно, небольшое количество стека). Преимущество того, что не нужно беспокоиться о дополнительной синхронизации общего состояния (кроме сообщения, проходящего курс), превосходит недостатки на мой взгляд.

Вы должны рассмотреть возможность использования F #. Он отлично подходит для программирования логически-однопоточных агентов без горения нитей (например, агенты могут прыгать на ThreadPool, но все равно реагируют на сообщения в сериализованной моде, а приезжающее сообщение на их почтовом ящике просматривает их и расписание Threampool Works).

http://blogs.msdn.com/b/dsyme/archive/2010/02/15/async-and-parallel-design-patterns-in-f-part-3-agents.aspx.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top