Re[18]: Можно ли избавиться от async|await?
От: mrTwister Россия  
Дата: 15.12.25 15:46
Оценка:
Здравствуйте, ·, Вы писали:

·>Здравствуйте, mrTwister, Вы писали:



T>>Ну представь для простоты, что у тебя в пуле один поток. И мы используем один этот поток, чтобы конкурентно выполнять несколько кусков работы "процессов". Это можно сделать через async\await, разбив работу на таски и выстроив таски в цепочку. В этом случае получаем кооперативную многозадачность, так как таска должна добровольно отпустить поток, чтобы дать возможность конкурентному "процессу" продвинуться, выполнив свою таску.

·>Это эквивалентно одному локу. Пока кто-то держит лок, другие ждут.

T>>Тут стандартные проблемы: если таска ведет себя плохо, отказывается кооперироваться и не отдает поток, то все конкурентные процессы останавливаются.

·>Если таска ведёт себя плохо и не отпускает лок, то все конкурентные процессы останавливаются.

·>В чём разница-то?


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