Artem
блокировка рутины
например в ожидании сообщения из канала?
Anonymous
Artem 🏳️‍🌈 USSR Gay Power 666 гошный шедулер работает над ос шедулером, если ты про это
Алексей
можно, но это будет работать в системном треде
Ох. Можно запилить ОС, где не будет самой концепции тредов, а будет та самая вм с гринтредами.
Stepan
У меня есть func noname(data string) stirng мне нужно запутстить ее как go noname(data) как правильно получать строку которую она отдаст?
Алексей
чтобы были гринтреды без системных тредов
Anonymous
процессор то обрабатывает потоки инструкции
Je
Ох. Можно запилить ОС, где не будет самой концепции тредов, а будет та самая вм с гринтредами.
Гринтреды подразумевают собой работу в userspace, а ОС в kernelspace, потому они и грин, что не требуют переключения
Алексей
процессор то обрабатывает потоки инструкции
процессор про треды ничего не знает, это абстракция чисто на уровне ОС
Anonymous
Добрый день, вопрос по gorm. Есть две структуры и я упорно не понимаю почему не получается назначит внешние ключи, можете подсказать что я делаю не так type Answer struct { ID uint gorm:"primary_key",json:"id" User User gorm:"unique;foreignkey:UserID" UserID int Objects []Object gorm:"foreignkey:QuestionID" ObjectID int Questions []Question gorm:"foreignkey:QuestionID" QuestionID int } type Question struct { ID int gorm:"primary_key",json:"id" FirstObject Object gorm:"foreignkey:FirstObjectID" FirstObjectID int SecondObject Object gorm:"foreignkey:SecondObjectID" SecondObjectID int }
Алексей
Алееее, потоки инструкции
Что такое поток инструкций?
Stepan
никак. надо использовать каналы для горутин
Аааа мне это в анонимку нужно завернуть, точно)
Stepan
Спасибо!
Алексей
Либа есть
а, ну может быть, но это какая-то экспериментальная вещь походу
Andrei 🦉
greenlets в питоне были
Andrei 🦉
во второй версии
Je
а, ну может быть, но это какая-то экспериментальная вещь походу
gevent десяток лет уже, никакая не экспериментальная, но в коре не попали и никогда не попадут
.
Да, greenlet/gevent/evenlet
Алексей
это же вроде асинхронщина на корутинах, а не гринтреды (ну по крайней мере всякие gevent)
Alexander
в джяве есть гринтреды.
Alexander
самая лучшая джява, 1.1 всем рекомендую. вообще ничего лишнего
Anonymous
Что такое поток инструкций?
Все очень печально
Je
это не гринтреды
смысл говорить, если ты не знаешь точно? gevent это надстройка для питона над greenlet, реализация гринтредов
Алексей
Все очень печально
Процессор ни про какие потоки не знает вообще, у него есть регистр IP и прерывания. А то что после прерывания IP меняется на другой - это целиком заслуга ОС.
Andrei 🦉
Хм, тогда зачем async/await в питон впихнули, непонятно.
gevent состоит из хаков чуть более чем полностью, его даже на 3й питон не смогли портировать
Алексей
gevent состоит из хаков чуть более чем полностью, его даже на 3й питон не смогли портировать
То есть толку от этих костыльных гринтредов увы не очень много.
.
gevent состоит из хаков чуть более чем полностью, его даже на 3й питон не смогли портировать
Supported Platforms gevent 1.3 runs on Python 2.7 and Python 3. Releases 3.4, 3.5 and 3.6 of Python 3 are supported.
.
Давно еще портатировали
Andrei 🦉
То есть толку от этих костыльных гринтредов увы не очень много.
нет, толк есть и очень большой, gevent многие использовали
Andrei 🦉
Supported Platforms gevent 1.3 runs on Python 2.7 and Python 3. Releases 3.4, 3.5 and 3.6 of Python 3 are supported.
а, ну я немного выпал из контекста за последние пару лет, но не могли его портировать очень долго
Je
Хм, тогда зачем async/await в питон впихнули, непонятно.
В многопоточной модели выполнения куча проблем с примитивами синхронизации, очень легко попасть в race/deadlock, в питоне очень сложно выявлять подобное, gevent патчил сетевое io (socket.socket) и предлагал писать библиотеки с его поддержкой в Си-экстеншнах. Асинхронщина более управляема и до следующего await переключения не происходит.
Je
Подход го даже более элегантен, у нас eventloop спрятан внутри и диспатчится самостоятельно без необходимости выкидывать асинхронщину в клиентский код, хороший тому пример - netpooler.
Je
Но в питоне таки есть треды, помимо асинхронщины в отличии от той же ноды. Я вот про асинхронщину в питоне мало что знаю, но потоки явно там как-то прикручены.
Можешь в чат по питону зайти, пообщаемся, здесь это оффтопик. Треды в питоне есть, но там есть особенность - GIL. И это совсем не про асинхронщину
Алексей
Короче в питоне в этом отношении всё несколько костыльно сделано
Алексей
Можешь в чат по питону зайти, пообщаемся, здесь это оффтопик. Треды в питоне есть, но там есть особенность - GIL. И это совсем не про асинхронщину
Но GIL я как-то не особо рассматриваю, так как полагаю, что никто не будет писать прям долгоиграющий питоновский код без вызова сишных либ
Andrei 🦉
Короче в питоне в этом отношении всё несколько костыльно сделано
ну асинхронщина в питонячей стандартной либе реализована наиболее отвратным способом, как по мне, от самого отдельного синтаксиса для объявления функций, которые работают асинхронно, у меня бомбит
Roman
Хм, тогда зачем async/await в питон впихнули, непонятно.
Потому что кому-то не нравится неявная асинхронность
Andrei 🦉
Вы не в теме.
то есть то, как они обращаются со стеком при переключении контекста, это best practice?
Алексей
Потому что кому-то не нравится неявная асинхронность
А мне вот как раз нравится. А если я таки хочу явную асинхронность, то пойду в ноду, где нет потоков и связанных с ними проблем, где единый event loop, где все либы изначально асинхронны.
Сергей
На сколько я в теме от GIL в питоне избавиться уже не получиться, без потери совместимости со всеми сишными модулями
Andrei 🦉
Да, везде так. И если что, есть pypy
pypy, которого в проде практически не бывает, т.к. всем нужны либы с зависимостями на сях
Сергей
Плюс легаси счётчик ссылок
Алексей
Опять же, если активно юзать сишные либы для тяжёлых и долгих операций, то GIL не должен особо мешать
Сергей
ну они пытаются, пару лет назад даже был доклад на Pycon, GILоктомия
Кстати в OCaml по-моему даже больше шансов избавиться от GIL
Сергей
Опять же, если активно юзать сишные либы для тяжёлых и долгих операций, то GIL не должен особо мешать
Ну в принципе если раскидать всё по процессом, то да. Если нужна общая память, то тяжелее, на сколько я понимаю
Roman
pypy, которого в проде практически не бывает, т.к. всем нужны либы с зависимостями на сях
Расскажите это мне. Я стримил видео в интернеты на gevent + pypy
Сергей
Вообще для задач с AI, для которых сейчас популярен python я бы взял Julia
Сергей
А библиотеки где брать?
Они есть, а если нет, то есть @pycall + легко вызывать сишные либы
Roman
Не, я вообще про то, что вроде при вызове сишного кода GIL снимается
Да, но серверным процессам gil не помеха. Собственно, автор fasthttp предлагает схожую схему для go: выставить GOMAXPROCS=1 и запустить процессов по числу ядер
Daniel
он, вроде, уже давно не предлагает
Roman
Они есть, а если нет, то есть @pycall + легко вызывать сишные либы
так говорят в любом языке)) только вот почему-то используют не чаще чем переходят на тот язык, который для задания ближе)
Andrei 🦉
Расскажите это мне. Я стримил видео в интернеты на gevent + pypy
значит вы из того мифического 1% питоноводов, кто использовал pypy в проде
Daniel
это, вроде, от старых времен охвостье
Daniel
onepercenter, да
Roman
значит вы из того мифического 1% питоноводов, кто использовал pypy в проде
Большинству не нужны эти загоны про производительность, например.