Re: Многопоточная отправка данных на сервер
От: okman Беларусь https://searchinform.ru/
Дата: 28.09.12 05:48
Оценка:
Здравствуйте, Nikola78, Вы писали:

N>Есть windows сервис. Используется для обновления списка своих товаров на торговой площадке: он следит за файлом с помощью FileSystemWatcher и как только тот пояляется, он его читает и отправляет запросы в API интерфейс на сервер.


N>Я сделал его многопоточным, установил кол-во потоков равным 15. Не знаю почему именно столько и не знаю, много ли это или мало. Однако он работает.


Потоки хороши, когда они могут распараллелить задачу, не мешая друг другу.
В данном случае смысла в большом количестве потоков нет. Сеть-то все равно одна и потоки
будут "толпиться в дверях", мешая друг другу в ожидании своей очереди.
Можете сделать хоть сто потоков — отправка не будет быстрее.

Вот если на компьютере несколько сетевых интерфейсов, тогда да, можно попробовать через
каждый интерфейс пускать разные порции данных. Тогда, может, и будет смысл.

N>Вот метод отправки данных на сервер.


N>Идея такова:

N> — если записей в файле меньше, чем кол-во потоков, то проходится по каждой записи и создаем один поток и отправляем данные.
N> — если записей в файле больше, чем кол-во потовов, то отправляем данные порциями по 15 (кол-во потоков).

N>...


И что, на каждую запись приходится создавать отдельный HTTP-запрос ? Так это ведь ужасно,
учитывая их малый объем. По TCP-трафику получится многократный оверхед.

N>Как мне кажется, тут довольная низкая производительность: сначала он ест 2Кб. Если добавить файл в директорию, то он начинает есть 50Кб.

N>К тому же, файл с 20 записями весит около 0,5Кб. Если будет весить около 1Мб, то в нем будет много тысяч записей. Их все их нужно будет отправлять порциями по 15 шт.

Мегабайтовый файл можно отправить на сервер в одном потоке за несколько секунд. Подумайте об этом.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.