Сообщение Re[5]: Как оптимизировать выполнения 10000 параллельных зада от 05.08.2016 13:21
Изменено 05.08.2016 13:28 Serginio1
Здравствуйте, LWhisper, Вы писали:
LW>
LW>Возможно, я чего-то не понимаю? Повисший на локе await переводит поток в сигнальное состояние и тот выполняет другие задачи из пула?
В асинхронном программировании все основано на событии и разбиении метода на участки которые выполняются по сигналу выполнения задачи используя конечный автомат.
Задача повисшая на локе await завершает свою работу в потоке и продолжит работу когда задача на await завершится. За этим следит планировщик.
У тебя будет куча задач висящих на await , но количество используемых потоков будет равно реально работающим.
LW>
LW> /// <summary>
LW> /// Asynchronously waits for this event to be set.
LW> /// </summary>
LW> public Task WaitAsync()
LW> {
LW> lock (_sync)
LW> {
LW> var ret = _tcs.Task;
LW> //Enlightenment.Trace.AsyncManualResetEvent_Wait(this, ret);
LW> return ret;
LW> }
LW> }
LW>
LW>Возможно, я чего-то не понимаю? Повисший на локе await переводит поток в сигнальное состояние и тот выполняет другие задачи из пула?
В асинхронном программировании все основано на событии и разбиении метода на участки которые выполняются по сигналу выполнения задачи используя конечный автомат.
Задача повисшая на локе await завершает свою работу в потоке и продолжит работу когда задача на await завершится. За этим следит планировщик.
У тебя будет куча задач висящих на await , но количество используемых потоков будет равно реально работающим.
Re[5]: Как оптимизировать выполнения 10000 параллельных зада
Здравствуйте, LWhisper, Вы писали:
LW>
LW>Возможно, я чего-то не понимаю? Повисший на локе await переводит поток в сигнальное состояние и тот выполняет другие задачи из пула?
В асинхронном программировании все основано на событии и разбиении метода на участки которые выполняются по сигналу выполнения задачи используя конечный автомат.
Задача повисшая на локе await завершает свою работу в потоке и продолжит работу когда задача на await завершится. За этим следит планировщик.
У тебя будет куча задач висящих на await , но количество используемых потоков будет равно реально работающим.
Работа задач это облегченные fiber. Еще в энумераторах через yield MS пошла на сохранение состояние и продолжение по вызову.
Async await аналогично yield, только MoveNext() возникает по окончании задачи ждущей на await
LW>
LW> /// <summary>
LW> /// Asynchronously waits for this event to be set.
LW> /// </summary>
LW> public Task WaitAsync()
LW> {
LW> lock (_sync)
LW> {
LW> var ret = _tcs.Task;
LW> //Enlightenment.Trace.AsyncManualResetEvent_Wait(this, ret);
LW> return ret;
LW> }
LW> }
LW>
LW>Возможно, я чего-то не понимаю? Повисший на локе await переводит поток в сигнальное состояние и тот выполняет другие задачи из пула?
В асинхронном программировании все основано на событии и разбиении метода на участки которые выполняются по сигналу выполнения задачи используя конечный автомат.
Задача повисшая на локе await завершает свою работу в потоке и продолжит работу когда задача на await завершится. За этим следит планировщик.
У тебя будет куча задач висящих на await , но количество используемых потоков будет равно реально работающим.
Работа задач это облегченные fiber. Еще в энумераторах через yield MS пошла на сохранение состояние и продолжение по вызову.
Async await аналогично yield, только MoveNext() возникает по окончании задачи ждущей на await