Здравствуйте, Serginio1, Вы писали:
S>>> За счет того, что состояние хранит не на стеке потока, и в регистрах, а в полях класса. А те которые в потоке с ними проще работать, так как в пуле их немного.
S>·>Какое ты увидел состояние в том коде? В каких полях какого класса?
S> А поток, что выполняет? В Task создается класс и автомат для перехода по await
В потоке эмулируется конкурентный доступ к общему кешу.
S>·>Эээ... И что? Я всё ещё не понимаю как это относится к тому коду, к особенностям работы gc и к LL?
S> Это относится к тому, что потоки это уже старое ненужное.
Ой-ё.
S>>> Кстати ветка по поводу асинхронного программирования. Как оптимизировать выполнения 10000 параллельных задач?
S>·>В случае LL выполнение 10000 параллельных задач не бывает. Не надо путать low latency и high throughput.
S> Ты привел какой то непонятный пример с огромным количеством потоков. На GC как раз влияет количество потоков, где нужно его останавливать, смотреть стек потока регистры.
К сожалению конкретных цифр я не смог найти, но в тексте написано "several threads", на случай если ты не знаешь английский переведу: "несколько потоков". Про "огромное количество потоков" ты придумал сам, с собой и спорь.
Несколько потоков это обычно для LL-применений: разные треды делают вполне конкретную и довольно разную работу: читают данные из сетевого буфера, делают какие-то вычисления, реплицируют, пишут на диск, пишут в сеть и т.п. Таких тредов как правило меньше чем ядер процессора.
10к потоков характерно для high throughput задач, когда один сервер с жалкой сотней ядер тужится эффективно обработать миллионы однотипных запросов, в таких случаях редкие зависоны на 1-2 секунды никто не замечает, в LL мире такой зависон является critical production issue и в лучшем случае персональные извинения перед клиентом.
S>В Task все данные хранятся внутри генерируемого класса. Async/await и механизм реализации в C# 5.0
S>https://habrahabr.ru/post/260217/
S> При этом пока задача вне потока выполнения код хранится в виде делегата. Никакого стека, регистров. Нужно приостановить только планировщик.
А делегат где хранится?
Ты видимо вообще не понимаешь что такое LL. Там ничего приостанавливать нельзя.