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

Nick
04.09.2018
12:37:57

Алексей
04.09.2018
12:38:07

Roman
04.09.2018
12:38:14

Google

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

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

Nick
04.09.2018
12:38:28

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) как правильно получать строку которую она отдаст?

Roman
04.09.2018
12:39:37

Nick
04.09.2018
12:39:39

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

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

Roman
04.09.2018
12:39:57

Google

Jentry
04.09.2018
12:40:11

Aleksandr
04.09.2018
12:40:30

Roman
04.09.2018
12:40:30

Алексей
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
}

Nick
04.09.2018
12:40:57

Алексей
04.09.2018
12:41:07

Никита
04.09.2018
12:41:13

GoodMoodDealler
04.09.2018
12:41:16

Алексей
04.09.2018
12:41:36

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

Алексей
04.09.2018
12:42:50

Никита
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

Алексей
04.09.2018
12:50:07

Никита
04.09.2018
12:50:23
Давно еще портатировали

Andrei
04.09.2018
12:51:23

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.

Алексей
04.09.2018
12:55:17

Jentry
04.09.2018
12:56:11

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

Andrei
04.09.2018
13:01:09

Roman
04.09.2018
13:01:25

Google

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

Roman
04.09.2018
13:03:15

Алексей
04.09.2018
13:03:36

Roman
04.09.2018
13:03:50

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

Andrei
04.09.2018
13:04:36

Сергей
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

Roman
04.09.2018
13:06:39

Сергей
04.09.2018
13:07:38

Roman
04.09.2018
13:07:42

Алексей
04.09.2018
13:08:15

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

Roman
04.09.2018
13:15:22

Сергей
04.09.2018
13:16:39

Roman
04.09.2018
13:16:59

Google

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

Roman
04.09.2018
13:17:33

Roman
04.09.2018
13:17:33

Andrei
04.09.2018
13:17:36

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

Roman
04.09.2018
13:17:55

Daniel
04.09.2018
13:18:05
onepercenter, да

Сергей
04.09.2018
13:18:31

Roman
04.09.2018
13:19:18

Сергей
04.09.2018
13:20:20
И на сколько я понял, будет тяжелее загрузить ядра процессора равномерно, хотя могу ошибаться
Как по мне, довольно круто утилизируется многоядерность в Erlang-e.

Roman
04.09.2018
13:25:25

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

Сергей
04.09.2018
13:29:15

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

Илья
04.09.2018
13:32:47
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. если функции чистые и руки прямые, то можно в ассемблер залезть и там поковырять.
это в ответ на вопрос, что делать, когда возможные оптимизации выполнены, перечислили возможные оптимизации? (int vs int32, без пруфов я бы не принял)