они попали в один круг эвент лупа, то йелд должен проснуться раньше по настенным часам. если вы не йелдите, а спите на канале/кондваре то вообще говоря наоборот.
с какой проблемой вы столкнулись, что нужно думать о порядке пробуждения файберов?
При большом количестве запросов через айпрото, есть ощущение, что свой файбер редко просыпается, т.е. сначала разберется вся очерередь файберов (а новые call вызовы попадают сюда), а только потом на новом этапе эвент лупа дойдет до него очередь
он просыпается ровно один раз каждый эвент луп. вероятно эвент-луп медленно крутится. нет ли там каких-нибудь других йелдов типа инсерт/делит/апдейт/реплейс не-временных спейсов? может есть еще месте где он йелдит? если у вас есть tarantool/metrics, то он таймит среднее время прокрутки эвент лупа
какое время прокрутки ЕВ приемлемое и оно же зависит от количества файберов, как это оценить?
оно зависит от тяжеловесности событий для обработки. не все файберы обрабатываются в каждый ев ран, например если файбер спит на канале, и в него ничего не приходит— его не будут будить и даже тратить время на его шедулинг. но если за раз вечно приходят селекты по десять тысяч таплов, или какие-нибудь плохие иттерации по индексам — это все будет жрать время цпу я бы сказал, более-менее предсказуемый сетап это 10-20мс на один ЕВ ран. кстати, всегда можно посмотреть на утилизацию цпу tx — основного треда тарантула, он тоже отражает интенсивность его загрузки
ок, хорошо, спасибо постараюсь более детально понять, что у меня происходит, и вернусь с более детальными вопросами, если будут
начиная где-то с 2.8 есть fiber.top(), в fiber.info() появилось поле time — которое считает суммарное время, которое файбер провел на камне. это может помочь для поиска слишком агрессивного файбера
Обсуждают сегодня