Сообщение Re[10]: Как оптимизировать выполнения 10000 параллельных зад от 06.08.2016 1:34
Изменено 06.08.2016 1:47 LWhisper
Здравствуйте, Sharov, Вы писали:
S>Очевидно, что рукотворная вечная блокировка потоки в пул не вернет. Асинхронное IO потоки возвращает, ибо блокировка логическая. Т.е. 10000 соединений проблемой не должны быть.
Стоп. Сейчас речь о конкретном решении, предложенном в данной ветке — пакете AsyncEx и реализации AsyncManualResetEvent в нём. Судя по тому, что я вижу — там самая что ни на есть полноценная блокировка, удерживающая поток. Соответственно ни о каком "True Async" не может быть и речи.
Опять же — если вас не затруднит, приведите, пожалуйста, пример логической блокировки, которая возвращает поток в пул, а, после захвата блокировки, продолжает выполнение в новом потоке.
S>Очевидно, что рукотворная вечная блокировка потоки в пул не вернет. Асинхронное IO потоки возвращает, ибо блокировка логическая. Т.е. 10000 соединений проблемой не должны быть.
Стоп. Сейчас речь о конкретном решении, предложенном в данной ветке — пакете AsyncEx и реализации AsyncManualResetEvent в нём. Судя по тому, что я вижу — там самая что ни на есть полноценная блокировка, удерживающая поток. Соответственно ни о каком "True Async" не может быть и речи.
Опять же — если вас не затруднит, приведите, пожалуйста, пример логической блокировки, которая возвращает поток в пул, а, после захвата блокировки, продолжает выполнение в новом потоке.
Re[10]: Как оптимизировать выполнения 10000 параллельных зад
Здравствуйте, Sharov, Вы писали:
S>Очевидно, что рукотворная вечная блокировка потоки в пул не вернет. Асинхронное IO потоки возвращает, ибо блокировка логическая. Т.е. 10000 соединений проблемой не должны быть.
Стоп. Сейчас речь о конкретном решении, предложенном в данной ветке — пакете AsyncEx и реализации AsyncManualResetEvent в нём. Судя по тому, что я вижу — там самая что ни на есть полноценная блокировка, удерживающая поток. Соответственно ни о каком "True Async" не может быть и речи.
Опять же — если вас не затруднит, приведите, пожалуйста, пример логической блокировки, которая возвращает поток в пул, а, после захвата блокировки, продолжает выполнение в новом потоке.
UPD:
На всякий случай переписал создание новой таски с использованием async delegate. Как и ожидалось, это ничего не изменило — несколько тысяч тредов, повисших на блокировке.
S>Очевидно, что рукотворная вечная блокировка потоки в пул не вернет. Асинхронное IO потоки возвращает, ибо блокировка логическая. Т.е. 10000 соединений проблемой не должны быть.
Стоп. Сейчас речь о конкретном решении, предложенном в данной ветке — пакете AsyncEx и реализации AsyncManualResetEvent в нём. Судя по тому, что я вижу — там самая что ни на есть полноценная блокировка, удерживающая поток. Соответственно ни о каком "True Async" не может быть и речи.
Опять же — если вас не затруднит, приведите, пожалуйста, пример логической блокировки, которая возвращает поток в пул, а, после захвата блокировки, продолжает выполнение в новом потоке.
UPD:
На всякий случай переписал создание новой таски с использованием async delegate. Как и ожидалось, это ничего не изменило — несколько тысяч тредов, повисших на блокировке.
Task.Run(async delegate
{
await Task.Delay(100);
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
lock (_lock)
{
}
await Task.Delay(100);
});