@gogolang

Страница 1354 из 1630
Artem
04.09.2018
12:37:36
в какой момент шедулер переключает контекст между горутинами?

Алексей
04.09.2018
12:38:07
в ос все строится вокруг системных тредов
Можно сделать какую-нибудь вм, которая будет в одном треде крутиться, а держать кучу гринтредов переключая их между собой.

Google
Nick
04.09.2018
12:38:15
можно

Artem
04.09.2018
12:38:18
ну как я понимаю каждый тред ос обслуживает набор рутин

Artem
04.09.2018
12:38:32
блокировка рутины
например в ожидании сообщения из канала?

Никита
04.09.2018
12:38:36
Nick
04.09.2018
12:39:12
Artem ?️‍? USSR Gay Power 666 гошный шедулер работает над ос шедулером, если ты про это

Алексей
04.09.2018
12:39:16
можно, но это будет работать в системном треде
Ох. Можно запилить ОС, где не будет самой концепции тредов, а будет та самая вм с гринтредами.

GoodMoodDealler
04.09.2018
12:39:37
У меня есть func noname(data string) stirng мне нужно запутстить ее как go noname(data) как правильно получать строку которую она отдаст?

Алексей
04.09.2018
12:39:51
чтобы были гринтреды без системных тредов

Nick
04.09.2018
12:39:55
процессор то обрабатывает потоки инструкции

Google
Jentry
04.09.2018
12:40:11
Ох. Можно запилить ОС, где не будет самой концепции тредов, а будет та самая вм с гринтредами.
Гринтреды подразумевают собой работу в userspace, а ОС в kernelspace, потому они и грин, что не требуют переключения

Алексей
04.09.2018
12:40:31
процессор то обрабатывает потоки инструкции
процессор про треды ничего не знает, это абстракция чисто на уровне ОС

ImCat
04.09.2018
12:40:35
Добрый день, вопрос по 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 }

Алексей
04.09.2018
12:41:07
Алееее, потоки инструкции
Что такое поток инструкций?

Никита
04.09.2018
12:41:13
GoodMoodDealler
04.09.2018
12:41:16
никак. надо использовать каналы для горутин
Аааа мне это в анонимку нужно завернуть, точно)

GoodMoodDealler
04.09.2018
12:41:39
Спасибо!

Никита
04.09.2018
12:41:41
Алексей
04.09.2018
12:42:04
Либа есть
а, ну может быть, но это какая-то экспериментальная вещь походу

Andrei
04.09.2018
12:42:30
greenlets в питоне были

во второй версии

Jentry
04.09.2018
12:42:41
а, ну может быть, но это какая-то экспериментальная вещь походу
gevent десяток лет уже, никакая не экспериментальная, но в коре не попали и никогда не попадут

Никита
04.09.2018
12:43:00
Да, greenlet/gevent/evenlet

Алексей
04.09.2018
12:43:41
это же вроде асинхронщина на корутинах, а не гринтреды (ну по крайней мере всякие gevent)

Alexander
04.09.2018
12:43:44
в джяве есть гринтреды.

Google
Alexander
04.09.2018
12:44:01
самая лучшая джява, 1.1 всем рекомендую. вообще ничего лишнего

Nick
04.09.2018
12:44:29
Что такое поток инструкций?
Все очень печально

Jentry
04.09.2018
12:44:36
это не гринтреды
смысл говорить, если ты не знаешь точно? gevent это надстройка для питона над greenlet, реализация гринтредов

Алексей
04.09.2018
12:46:24
Все очень печально
Процессор ни про какие потоки не знает вообще, у него есть регистр IP и прерывания. А то что после прерывания IP меняется на другой - это целиком заслуга ОС.

Andrei
04.09.2018
12:49:41
Хм, тогда зачем async/await в питон впихнули, непонятно.
gevent состоит из хаков чуть более чем полностью, его даже на 3й питон не смогли портировать

Алексей
04.09.2018
12:50:07
gevent состоит из хаков чуть более чем полностью, его даже на 3й питон не смогли портировать
То есть толку от этих костыльных гринтредов увы не очень много.

Никита
04.09.2018
12:50:23
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
04.09.2018
12:51:23
То есть толку от этих костыльных гринтредов увы не очень много.
нет, толк есть и очень большой, gevent многие использовали

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.
а, ну я немного выпал из контекста за последние пару лет, но не могли его портировать очень долго

Jentry
04.09.2018
12:52:45
Хм, тогда зачем async/await в питон впихнули, непонятно.
В многопоточной модели выполнения куча проблем с примитивами синхронизации, очень легко попасть в race/deadlock, в питоне очень сложно выявлять подобное, gevent патчил сетевое io (socket.socket) и предлагал писать библиотеки с его поддержкой в Си-экстеншнах. Асинхронщина более управляема и до следующего await переключения не происходит.

Jentry
04.09.2018
12:54:36
Подход го даже более элегантен, у нас eventloop спрятан внутри и диспатчится самостоятельно без необходимости выкидывать асинхронщину в клиентский код, хороший тому пример - netpooler.

Jentry
04.09.2018
12:56:11
Но в питоне таки есть треды, помимо асинхронщины в отличии от той же ноды. Я вот про асинхронщину в питоне мало что знаю, но потоки явно там как-то прикручены.
Можешь в чат по питону зайти, пообщаемся, здесь это оффтопик. Треды в питоне есть, но там есть особенность - GIL. И это совсем не про асинхронщину

Алексей
04.09.2018
12:56:57
Короче в питоне в этом отношении всё несколько костыльно сделано

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

Andrei
04.09.2018
13:01:09
Короче в питоне в этом отношении всё несколько костыльно сделано
ну асинхронщина в питонячей стандартной либе реализована наиболее отвратным способом, как по мне, от самого отдельного синтаксиса для объявления функций, которые работают асинхронно, у меня бомбит

Google
Andrei
04.09.2018
13:03:10
Вы не в теме.
то есть то, как они обращаются со стеком при переключении контекста, это best practice?

Алексей
04.09.2018
13:03:36
Потому что кому-то не нравится неявная асинхронность
А мне вот как раз нравится. А если я таки хочу явную асинхронность, то пойду в ноду, где нет потоков и связанных с ними проблем, где единый event loop, где все либы изначально асинхронны.

Сергей
04.09.2018
13:04:22
На сколько я в теме от GIL в питоне избавиться уже не получиться, без потери совместимости со всеми сишными модулями

Andrei
04.09.2018
13:04:36
Да, везде так. И если что, есть pypy
pypy, которого в проде практически не бывает, т.к. всем нужны либы с зависимостями на сях

Сергей
04.09.2018
13:04:38
Плюс легаси счётчик ссылок

Andrei
04.09.2018
13:05:20
Admin
ERROR: S client not available

Алексей
04.09.2018
13:05:47
Опять же, если активно юзать сишные либы для тяжёлых и долгих операций, то GIL не должен особо мешать

Сергей
04.09.2018
13:06:28
ну они пытаются, пару лет назад даже был доклад на Pycon, GILоктомия
Кстати в OCaml по-моему даже больше шансов избавиться от GIL

Сергей
04.09.2018
13:07:38
Опять же, если активно юзать сишные либы для тяжёлых и долгих операций, то GIL не должен особо мешать
Ну в принципе если раскидать всё по процессом, то да. Если нужна общая память, то тяжелее, на сколько я понимаю

Roman
04.09.2018
13:07:42
pypy, которого в проде практически не бывает, т.к. всем нужны либы с зависимостями на сях
Расскажите это мне. Я стримил видео в интернеты на gevent + pypy

Алексей
04.09.2018
13:08:15
Сергей
04.09.2018
13:08:28
Вообще для задач с AI, для которых сейчас популярен python я бы взял Julia

Сергей
04.09.2018
13:16:39
А библиотеки где брать?
Они есть, а если нет, то есть @pycall + легко вызывать сишные либы

Roman
04.09.2018
13:16:59
Не, я вообще про то, что вроде при вызове сишного кода GIL снимается
Да, но серверным процессам gil не помеха. Собственно, автор fasthttp предлагает схожую схему для go: выставить GOMAXPROCS=1 и запустить процессов по числу ядер

Google
Daniel
04.09.2018
13:17:32
он, вроде, уже давно не предлагает

Roman
04.09.2018
13:17:33
Roman
04.09.2018
13:17:33
Они есть, а если нет, то есть @pycall + легко вызывать сишные либы
так говорят в любом языке)) только вот почему-то используют не чаще чем переходят на тот язык, который для задания ближе)

Andrei
04.09.2018
13:17:36
Расскажите это мне. Я стримил видео в интернеты на gevent + pypy
значит вы из того мифического 1% питоноводов, кто использовал pypy в проде

Daniel
04.09.2018
13:17:43
это, вроде, от старых времен охвостье

Daniel
04.09.2018
13:18:05
onepercenter, да

Roman
04.09.2018
13:19:18
значит вы из того мифического 1% питоноводов, кто использовал pypy в проде
Большинству не нужны эти загоны про производительность, например.

А в чём профит?
Меньше lock contention на объектах ядра

Сергей
04.09.2018
13:20:20
Меньше lock contention на объектах ядра
А как быть с разделяемой памятью?

И на сколько я понял, будет тяжелее загрузить ядра процессора равномерно, хотя могу ошибаться

Как по мне, довольно круто утилизируется многоядерность в Erlang-e.

Roman
04.09.2018
13:25:25
Никита
04.09.2018
13:29:02
Кстати, в Эрланге как акторы реализованы? Тоже поверх тредов ОС как горутины?

Andrei
04.09.2018
13:30:36
Для чего она нужна?
а зачем заморачиватся с тредами,если вам не нужна общая память? нафоркали процессов и все хорошо на любом языке программирования

ainu
04.09.2018
13:30:51
Ладно, спрошу не про дженерики: что вы делаете, если ваш код медленный, а возможности по оптимизации уже исчерпаны?
1. zero memory allocation между запросами 2. перевести с мапов на массивы 3. найти copy() и аллокации, убрать 4. поиграться с типами. зачастую Int быстрее чем int32/bool 5. зверская магия, когда есть map, допустим из 50 элементов, делается make(map, 50), и копируется - чтение из нового будет быстрее, до 20-50% иногда. 6. алгоритмы! O(n) и все такое. 7. вместо стандартной библиотеки юзать свои функции (например которые вместо {}interface будут юзать int) 8. string поменять на слайс byte, когда есть промежуточные переводы туда сюда. Но это ерунда на самом деле. 9. если функции чистые и руки прямые, то можно в ассемблер залезть и там поковырять.

Сергей
04.09.2018
13:31:40
Ксати, в Erlang тоже неразделяемая память + на каждый легковесный процесс свой GC

Страница 1354 из 1630