Человек защищает свой проект, но получается так себе.
Можно хейтить виртуальный потоки за то, что они сырые, но концептуально они лучше.
Я и не говорил, что его мнение является абсолютно непредвзятым
так он их и не хейтит там, он там рассказывает про то как внутрянки обоих устроены. И для чего они создавались. Пока что килер фичей корутин является structured concurency. её и в лум хотят завести
Ну просто он сразу говорит, что красить код - это круто и надо красить его еще больше, а с этим мало кто согласится.
Структурное конкаренси - это круто, но нужно 3 человекам, основаная проблема, еще раз, в том, что они stackless и от этого не уйти.
в обоих подходах есть минусы. В джавовых виртуальных тредах прийдется вручную что-то там вызывать, не раскраска, но магии без нее не будет для ио
Не нужно ничего вызывать, все сделано на уровне стандартной библиотеки(А может и preemptibe прикрутят, все-таки у нас safepoint'ы есть), у continuation даже публичного api нет.
стандартная да, а другие либы?
Можно запарковать поток, но его и раньше можно было парковать.
А что другие? Другие используют стандартную либу.
JDBC Drivers все перрепишут?
Тикет висит...
"снованая проблема, еще раз, в том, что они stackless и от этого не уйти." а еще раз в чем проблема?
Проблема в том, что они красят код, а люди хотят писать старые-добрые thread per request сервера.
можно не красить код, это не проблема stackless threads. В корутинах решили что нужно красить, поясняли почему так решили. Меня порой это бесить, так как апи нужно думать (а нужен тут саспенд или нет), а з другой стороны очень стремно вызывать метод непонимая а его точно омжно вызывать
А можно пример, как можно в stackless-корутинах не красить код, когда у нас есть только состояние функции?
Если вам нужно понимать, что можно ли вызвать метод, это и есть причина, по которой не любят код, который красится.
конкретно в корутинах решили красить, вы о чем? Читаем что пишут люди? Где не красят? в Го например
Лол, в го stackfull-корутины, о чем вы?
При чем даже preemptive stackfull-корутины.
разве? ну ок ошибся. Хрошо лумовские треды - это тоже не реальные треды верно?
Что значит не реальные треды?
виртуальные, но да они ос стеком. Ладно пока примера хорошего нет, что бы прям без стек. Но чисто технически рантайм может дать апи что бы ты мог "выкачать стек" в continuation, и закачать обратно.
Это и делают виртуальные потоки, там нет ос стека.
Там идет freeze/thaw, когда с твеого pthread'а стек и регистры идут на хип в виде continuation(связаного списка).
не понял місль, лумовские тоже просто хранять в себе "стек", они ничего не испольняют и так же копируют. Не раскрашивать можно но єто не тривально сделать, нужно определить в каких случаях єто омжно
Лумовские континуации - это полноценный мутабельный стек, а континуации в котлине - это состояние одной функции.
да. Вся разница. Но вопрос же был про краски, и что они обязательны, но нет. Например, перед любым вызовом функции мы копируем стек (это дорого одна из причин красок) себе в объектик.
И снова нет, ничего мы не копируем перед вызовом функции.
вы в мою голову залезли и в мой выдуманый компилятор?
Вы придумали очень медленные stackfull-корутины.
да нет, стека нет, все почесному. Ну медлено я это в скобках написал
Я правда не понимаю, о чем вы. Вы сами написали, что вы копируете стек в continuation на хип. Это и есть stackfull-continuation.
стек - абсрактная штука. 1. Я могу в компайл тайме знать все свои переменные, и их помещать в continuation 2. Мы можем брать не напрямую со стсека, а например просить рантайм дать нам из этого контектса по этому имени ( нужна поддержка рантайма), и в компайл тайме вызвать н-раз возможность, чисто тереотически мы не знаем работаем мы состеком или нет. Но фактически скорей всего это будет стек.
Вы работаете в какой-то своей операционке? Просто если это линукс, то pthread(futex syscall) требует стека.
в абстрактной машине, JVM тоже строить свои предположения на абстрактном представлении машини
Что значит красить код?
То, что вы говорите - это и есть stackfull-континуации, просто вы решили натянуть их на другую модель памяти(Что в принципе имеет смысл, так как спецификация не требует стека).
у тебя функции на примере котлина делятся на suspend и обычные
да лол. Тогда котлин это stackfull, ведь он делает ровно тоже что и я предлагаю, Все вопрос закрыт
Нет, его континуации - это состоянии одной функции.
в корутинах тоже одной, но там еще родительськая есть, вот и все
И по этой причине они могут пароковаться на любой глубине стека:)
Стек есть у твоей операционки, корутины(и лум, и котлин) работают на тех же системных потоках.
совершено верно, неужели мі єтого не знали...
А как связан стек системного потока и корутина? Это не связные вещи.
Обсуждают сегодня