Size: a a a

Programming Offtop

2021 April 04

D

Dima in Programming Offtop
Как я поверхностно понимаю, в jvm у нас есть вариант асинхронности на основе тредпула, и реализуется за счет передачи следующей задачи в незанятый поток, остальные задачи ждут.
Поэтому, вроде бы, тредпул отношение к асинхронности имеет?
источник

AN

Alexander Nozik in Programming Offtop
Нет, вы можете работать на пуле и синхронно и асинхронно. Пул про конкурретность, а не про синхронность
источник

AN

Alexander Nozik in Programming Offtop
Для справки, есть куча областей - например вычисления, где асинхронность вредна. Мы как бы пытаемся это все подружить и иногда даже получается, но это сильно не просто.
источник

ch

central hardware in Programming Offtop
если метод запускает вычисления в новом потоке и возращает выполнение из метода, то это уже считается ассинхронщиной или еще нет?
источник

D

Dima in Programming Offtop
Значит, я его только для асинхронных задач использую. В таком случае асинхронность какая то контроллируемая, и проще локализуется в одном месте. А когда все покрыто async/await, то уже сложнее разобраться
источник

AN

Alexander Nozik in Programming Offtop
А еще есть пропагация ошибок и отмена, для которой более или менее пристойное решение есть только в котлин и оно все хорошо только по сравнению с остальным.
источник

AN

Alexander Nozik in Programming Offtop
Асинхронность вообще не про потоки. Она про то, как обрабатывается результат
источник

Э

Эд in Programming Offtop
Хорошо. Я пишу про сервера на webflux, общающиеся с другими. По сути никакой тяжёлой работы за запрос не делается. Например, нет цикла for 1 in 1..999999999 и тому подобное. Но для 1 сервиса есть sdk, предоставляющее блокирующий клиент. Тут чел писал про отдать таску в отдельный тред пул, можете поделиться, где почитать?
источник

AN

Alexander Nozik in Programming Offtop
Мы вроде договаривались с @neuradev сделать сессию ответов на вопросы про корутины и асинхронность на следующей неделе или через одну.
источник

AN

Alexander Nozik in Programming Offtop
Блокировка бывает разная. Если клиент не имеет колбэка, то вам придется сделать тред на каждый запрос, запарковать его и ждать ответа.  И да, это проблема, потому что каждый тред отъедает примерно 2 Мб памяти. Но это как бы единственная проблема
источник

D

Dima in Programming Offtop
Я обычно работаю, когда нужна простая асихнронность в Java как-то так:

val executor = newFixedThreadPool(4);
val futures =
   range(0, 100)
       .mapToObj(__ -> runAsync(() -> { /* Асинхронный код здесь */ }, executor))
       .toArray(CompletableFuture[]::new);
getUninterruptibly(allOf(futures));
источник

AN

Alexander Nozik in Programming Offtop
Оно не поможе потому что на каждый CompletableFuture на самом деле тоже тред создается. Для того, чтобы этого не было, надо чтобы где-то колбэк был
источник

D

Dima in Programming Offtop
В конце getUninterruptibly(allOf(futures)) циклично вызывает каждый фьючерс (и дожидается завершения). Так что вроде бы все ок?
источник

ch

central hardware in Programming Offtop
а про какое количество тредов вы все таки говорите? ну просто десятки, сотни, ну есть люди которые сотни тысячь гоняют и им вроде как норм
источник

AN

Alexander Nozik in Programming Offtop
Если там таки есть колбэк, то это уже асинхронный апи. Если нет - претензии к тому, кто писал ту либу, к которой обращаетесь
источник

ch

central hardware in Programming Offtop
там правда под милион  переключенний контекста в секунду но это уже детали
источник

Э

Эд in Programming Offtop
Ну вот, и выходит, что есть риск тащить асинхронщину в джаве, потому как может быть надобность интегрироваться с чужим сервисом, который не предоставляет клиент с колбеком
источник

AN

Alexander Nozik in Programming Offtop
Если есть функция типа readSomethingFromFile(): Data, то единственный способ достать его результат - это thread{readSomethingFromFile()}.run(). Потому что должен быть тред, который периодически просыпается и проверяет, не прилетел ли результат. Можно выпендрится и сделать свой эветн луп, который будет делать это не для одной задачи, но сложно.
источник

AN

Alexander Nozik in Programming Offtop
Так еще раз. Вы можете заблокироваться на чем угодно, даже на JS. Пойдите файлы почитайте.
источник

AN

Alexander Nozik in Programming Offtop
Напомнить, что в линуксе нет или почти нет асинхронного апи для чтения файлов?
источник