Задать вопрос
  • Task vs ThreadPool vs new Thread?

    @unknown3 Автор вопроса
    Илья, Ладн крч, понятно. Ну недогруза проца, точно не наблюдается. Он в проблемные моменты грузит на все 100%, тоесть он просто физически не может обработать все запросы. У меня там все построено на таксках, вот я думал мож на new Thread переделать и поможет....

    Хотя под каждый сокет(каждого клиента) при подключении создается отдельный thread, который висит и ждет сообщений от клиента (ведь using (var stream = new NetworkStream(socket)) блокирует поток). Ну соотвественно на 100+ клиентов, которые там постоянно висят создано 100+ тредов. Ну с этими проблем нет.

    Крч выхода 3, которые я вижу. Первый апгрейд железа. Второй уменьшение количества постоянно подключенных клиентов, хотя это навер невозможно. И третий, то что нужно было сделать с самого начала и предусмотреть этот момент, больше кешей у клиентов, меньше запросов, убрать с сервера ORM ибо еще тот тормоз, ну удобно же!

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

    Потому-что основная проблема как мне кажется, есть 100 клиентов у 5 из них херовый интернет. Когда я создаю таску и в цикле пытаюсь отправить всем сообщений, когда итерация доходит до клиентов с херовым интернетом, на них тратится очень много времени и все эти таски висят. А если у каждого клиента будет поток который занимается отправкой сообщений именно ему, то всем клиентам с быстрым интернетом сообщения будут доставлятся мгновенно, а тем у которых херовый интернет, пускай висят стеки сообщений, когда-то они да обработаются, главное они не будут тормозить остальных. Ну это так мысли...
  • Task vs ThreadPool vs new Thread?

    @unknown3 Автор вопроса
    Василий Банников,
    только не new Task, а Task.Run. и await не забывай.
    И ConfigureAwait(false)

    Всеравно это медленно, первые 10-15 задач быстро начинают выполнятся, далее медленно.
  • Task vs ThreadPool vs new Thread?

    @unknown3 Автор вопроса
    Василий Банников,
    Async/Await have been introduced with C# 5.0 and .NET Framework 4.5

    Я же говорю таски медленные. Вот я создаю сразу 100 тасков, и запускаю их. 10 из них мгновенно начинают выполняться, а остальные каждая через 1-3 сек.
    Пока они все выполнятся у меня или клиенты по таймауту отвалятся или клиенты пришлют еще запросов на которые нужно дать еще ответы, а это значит нужно наплодить еще тасков, а у меня еще прошлые не выполнились...
    Ну наверно нужно использовать new Thread, почему нет?
  • Task vs ThreadPool vs new Thread?

    @unknown3 Автор вопроса
    edward_freedom, ну await это слишком современно для .net 4.0 ну допустим я напишу так
    Task t = new Task(() => {
                        Console.WriteLine("RUN "+j);
                        Task.Delay(10000).Wait();
                        Console.WriteLine("end " + j);
                    });
                    t.Start();

    Ну сути дела это не меняет, первые 10 тасков пролетают мнгновенно. С 11й начинает каждую секунду выполнять.
  • Task vs ThreadPool vs new Thread?

    @unknown3 Автор вопроса
    edward_freedom, эмулируем выполнение каких-то действий, в реале это пересылка данных 100+ сокетам, у некоторых клиентов очень печальная скорость инета.