2012-05-29 2 views
4

У меня есть несколько автомобилей, которые отправляют данные через GPS на сервер каждые 10 секунд, и сервер должен прослушивать и декодировать данные для хранения в базе данных (Sql Server). В минуту будет сотни записей. На данный момент у меня есть один многопоточный код, который не очень полезен. За время обработки одной записи выпадает несколько записей. Я хочу создать многопоточный код, так что когда один поток занят обработкой, пакет перемещается в следующий доступный поток..Net UDP с использованием многопоточности

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

Может кто-нибудь помочь мне в этом, разместив несколько примеров?

ответ

2

Я бы рекомендовал установить асинхронный обратный вызов на прием, а затем вставить данные в очередь, оттуда переходить из очереди в другой поток. Обязательно заблокируйте эту очередь или используйте ConcurrentQueue, чтобы не объединить потоки вместе.

+0

Это правильно. Просто слушайте пакеты udp и добавляйте их в очередь. используйте autoresetevent, чтобы сигнализировать, что новые данные доступны в очереди. Не забудьте заблокировать очередь. –

+0

Большое спасибо. Что делать, если у меня есть ситуация, когда мне нужно создать только 5 потоков, и каждый раз, когда пакет входит, он должен быть назначен самому старому потоку, и как только обработка этого пакета будет выполнена, поток должен убить себя, а новый поток должен быть создан? – Anamika

+0

Я не думаю, что вам действительно нужно попасть в этот уровень сложности. Я бы увидел, что на данный момент у вас есть 2 потока, поток, получающий данные, и данные обработки потока из очереди. Идея - получать данные как можно быстрее, ставить в очередь, а затем ставить свою длинную логику (т. Е. Базу данных) на другой поток. Очередь будет поддерживать порядок получения, чтобы она могла занять столько времени, сколько необходимо для обработки. –

Смежные вопросы