Маjко
А можно имплементацию на play.rust-lang?
Лень, что-то похожее будет:
impl Future for MyMpscRecv<T> {
type Item = T;
type Error = MpscError;
fn poll(&self) -> Result<Async<Self::Item>> {
match self.inner.try_recv() {
Ok(value) => Ok(Async::Ready(value)),
Err(MpscError::NotReady) => Ok(Async::NotReady),
Err(e) => Err(e)
}
}
}
Типы ошибок итд точные не помню, но концепция там именно такая.
Vladimir
пол происходит в вейте, о чем ты вообщеЮ
Маjко
А лучше вообще сразу Stream запилить
Cuno
Cuno
или там каналы из std уже о tokio знают?
Маjко
С хера ли оно заснет?
Маjко
try_recv не блокируется
Маjко
Алло
Cuno
Заснёт = вернет NotReady первый раз
Cuno
и больше никогда не вызовется
Маjко
С чего вдруг?
Cuno
А с чего вдруг оно вызовется?
Маjко
В того что его будет поллить tokio до получения Ready
Маjко
Так как бы фьючи и работают
Маjко
Поправь если я не прав, конечно
Cuno
Замечательно, а с какой частотой оно должно его поллить?
Cuno
И когда?
Alexander
так вот с каналами, tokio пулит события не системные?
Маjко
Маjко
Это будет работать
Маjко
Точная частота — обращайтесь к коду токио
Alexander
грубо говоря что-то вроде epoll(0, список_fd); и после этого прогоняет ready по всем не системным штукам?
Маjко
Vladimir
там кроме нот реди должен еще метод дергаться, типа current().notify()
Vladimir
чтоб за следующий тик тоже дернуло пул
Alexander
доктор меня все игнорируют
Alexander
ага
Alexander
кстати это я так понимаю в mio все:
Alexander
?
Alexander
реализация
Alexander
вот я так понял, что оно или поллит все по очереди, что неразумно для IO
Маjко
Маjко
Alexander
или делает epoll с нулевым таймаутом на все связанное с FD, там вроде был трейт специально обученный, а потом поллит то что осталось
Alexander
IO на mio
а свои вещи типа каналов или таймаутов уже выше?
Alexander
в смысле библиотека уровнем выше, или тоже через mio
Alexander
я когда смотрел исходники токио мне казалось все туда уходит
Маjко
Как реализован tokio-timer не смотрел, мб тоже на mio.
Alexander
мне казалось что в реактор приходят типы реализующие трейты из mio только
Vladimir
@d34d10cc
https://play.rust-lang.org/?gist=05a03c637a3e99e80158e8cd89e76d30&version=stable
почему это работает?
Vladimir
точнее так, почему это не должно работать
Маjко
Потому что блокирует поток
Маjко
Плохо
Vladimir
так и должно быть
Vladimir
тут дедлока нет
Vladimir
лок и дедлок это разные вещи
Vladimir
на системный поток пофиг, он всеголишь продюсер событий
Anton
Anton
Экземплд
Anton
Посибо
Anton
Схоронил
Vladimir
та не за что
Anton
Ну мне это сильно помогло
Anton
Маjко
Окей, это не работает.
Был не прав, нужен хэндлер с нотифаями.
Осталось выяснить какого хрена это работало тогда
Vladimir
может все тесты получали днс
Маjко
Да нет, там таймер был, больше 500/сек не отдавал.
Маjко
Ладн, один хер там уже всё не так и контроль количесва запросов в секунду реализован иначе
Маjко
Спасибо за критику, буду знать :)
Kerrigan
Denis
разумеется, язык то в честь человека с этим именем назван
Denis
но судя по эмблеме на кофте сына, дело в не этом
Alex
нормальное еврейское имя!
Kerrigan
A64m
лучше бы по фамилии назвали
Kerrigan
по фамилии другой язык назван
Alex
хаскель кури!
A64m
тогда не был еще
A64m
когда для хаскеля название выбирали
Kerrigan
уже поздно
Denis
карри звучит куда вкуснее
Alex
கறி
A64m
ну, хоть не самое плохое выбрали, но плохо что не Карри, конечно
Denis
ну хоть не java curry