169 похожих чатов

Всем привет, я по потокам в джаве основы знаю, подскажите

в каком направлении двигаться чтобы Concurrency подучить, я как понимаю это пакет concurrency в джаве посмотреть надо, а в спринге уже реактивщина как раз на основе этого пакета работает?

12 ответов

11 просмотров

не только пакет конкарренси, еще потокобезопасные коллекции типа ConcurrentHashMap а вообще атомики, синхронайед, локи, латчи, барьеры, фазеры, ключевое слово volatile вот это надо спринг не обязательно реактивный в дефолт спринг вебе просто на каждый реквест делается по потоку а бины по дефолту синглтоны то есть, те же сервисы должны быть потокобезопасными

Concurrency in practice книжка такая есть

Георгий- Автор вопроса
Александр Ушаков
не только пакет конкарренси, еще потокобезопасные ...

То что на реквест по потоку я понимаю, мне больше интересно как сделать чтобы задачи паралельно выполнялись, какие то вычисления, мне например нужно парсер написать где каждый час будут данные с сайтов собираться, при этом когда данные нужно собирать на этих сайтах очень большая нагрузка и они грузятся по несколько минут, поэтому хотел как-то с многопоточкой запросы отправлять и потом уже собирать данные

Георгий
То что на реквест по потоку я понимаю, мне больше ...

тут лучше не многопоток многопоток хорош в тяжелых по цпу задачах асинк в тяжелых по io ожидание бд или ответа из сети - это io тут либо анноташка Async, либо вообще спринг вебфлюкс нюанс в том, что хибернейт построен на ждбц а он блокирующий следовательно, если не хочешь в асинке лочить свой пул при запросе в бд, надо менять на r2dbc и опционально брать обертку, которая его умеет, типа jooq

Георгий- Автор вопроса
Александр Ушаков
тут лучше не многопоток многопоток хорош в тяжелы...

А async допустим я сделаю метод в сервисе для парсинга, а потом если начну в цикле перебирать и вызывать этот метод, то эти задачи начнут паралельно работать? Так данные в html будут приходить мне ещё нужно будет потратить ресурсы чтобы распарсить его

Георгий
А async допустим я сделаю метод в сервисе для парс...

в этом и разница в многопотоке при блокирующем вызове блокируется весь поток и стоит ждет, пока вызов завершится, просто расходуя ресурсы в асинке задача может освобождать поток, на котором выполняется, пока ждет ответа чтобы этот поток заняли другие задачи и он не простаивал поэтому параллельности тут можно добиться и многопотоком, и асинком но асинк будет эффективнее

Александр Ушаков
тут лучше не многопоток многопоток хорош в тяжелы...

когда я в Котлин в Корутине на Dispatchers.IO делаю запрос в бд с помощью jdbc, то у меня весь пул потоков Dispatchers.IO блокируется?

Khannan ☭ Saitgalin
когда я в Котлин в Корутине на Dispatchers.IO дела...

не весь, а только тот поток, на котором выполняется корутина, в которой идет вызов ждбц

Георгий- Автор вопроса

Спасибо, нужно получше в этом разобраться) А можете пример задачи приближенной к реальным проектам подсказать которую нужно решить с многопоточкой

Георгий
Спасибо, нужно получше в этом разобраться) А може...

многие не хотят морочиться с асинком и, пока перфоманс устраивает, всю параллельность пилят на многопотоке прикол в том, что каждый поток расходует оперативку и условная 1000 потоков будет в разы больше жрать, чем 1000 асинк тасок на пуле из 10 потоков, например

Георгий- Автор вопроса
Александр Ушаков
многие не хотят морочиться с асинком и, пока перфо...

А спринг реактившина строится же на том же принципе, там пул потоков пока задача там что-то ожидает, то поток освобождается?

Александр Ушаков
многие не хотят морочиться с асинком и, пока перфо...

но асинк таски надо перекидывать между потоками, и этот оверхед имеет смысл только если перекидывать реально надо типа если асинк таска делает неблокирующие вызовы в бд, сеть или диск, и ждет сидит то ее выкидывают с потока, пока она ответ не получит и на поток кидают другие, которым есть что делать поэтому потоки не простаивают если таска делает какие-то долгие вычисления и прочее, то есть не ждет никакого внешнего ответа, то ставить ее на паузу и выкидывать с потока нельзя и она его просто так занимает и работать такое будет ничуть не быстрее голой многопоточки, а то еще и медленнее крч асинк нужен, чтобы куча потоков не простаивала, когда чего-то ждет извне программы

Похожие вопросы

Обсуждают сегодня

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
что насчет пагинга? на осдеве непонятно(
Vi Chapmann 🪙
26
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Ребят, что лучше для реверса: гидра или ида?
En Vind Av Sorg
26
Делаю велосипед логгер. К сообщению хочу прикрутить некоторую информацию, типа, кем отправлено, какой уровень, и всякое такое. И тут подумалось мне, почему бы не хранить весь...
Serjone
24
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
если загрузчик efi? если сама PML4 PDPT PDT PT лежит в неудобном для меня месте?
Vi Chapmann 🪙
8
Читаю сейчас [нет, уже больше не читаю!] курсовую о Булгакове, написанную, похоже, с помощью ChatGPT. Это удивительный психоделический опыт. Текст в основном написан в стиле б...
✨ Uni [🌊 В отпуске]
1
Карта сайта