Size: a a a

2020 April 17

AS

Andrey S in Go-go!
рефлект ему понадобится только если какие-то строки или слайсы переводить - и то только представление типа, которое заполняется с помошью unsafe
источник

AT

Anton Terisback in Go-go!
Владимир Столяров
А есть пример с контекстом, как это будет использоваться
источник

AT

Anton Terisback in Go-go!
*поменял ссылки на те который указывают точно на место где это нужно
источник

AF

Amir Fazleev in Go-go!
У меня есть некоторая логика с каналами for { select { default: } }, где в default проверяется пул пользователей. Когда пул достигает нужного размера, отправляются сообщения, пул сбрасывается и так по for'у. Если в default я не выставлю time.Sleep, то ядро цп будет загружено на 100%. Вопрос: использование time.Sleep в данном случае оправдано или нужно переделывать архитектуру?
источник

а

а кто это in Go-go!
а как вы в пул добавляете?
источник

AF

Amir Fazleev in Go-go!
а кто это
а как вы в пул добавляете?
case user := <-pool.register:
источник

AF

Amir Fazleev in Go-go!
а кто это
а как вы в пул добавляете?
Т.е. я могу и под события переделать, но не знаю насколько сложно это будет и правильно ли
источник

AT

Anton Terisback in Go-go!
Есть еще старая либа реализующая старую версию Wren'a
Там это реализовано просто, они возвращают reflect.Value
https://github.com/dradtke/go-wren/blob/50912fb5e4360c598fd989b4c30c0c556622a422/wren.go#L446
источник

AT

Anton Terisback in Go-go!
Но хочется что-то элегантнее
источник

а

а кто это in Go-go!
Amir Fazleev
case user := <-pool.register:
а зачем вам тогда default?
источник

AF

Amir Fazleev in Go-go!
а кто это
а зачем вам тогда default?
pool.register не единственный, там еще есть "события". А в default я проверяю сам pool
источник

AS

Andrey S in Go-go!
Amir Fazleev
У меня есть некоторая логика с каналами for { select { default: } }, где в default проверяется пул пользователей. Когда пул достигает нужного размера, отправляются сообщения, пул сбрасывается и так по for'у. Если в default я не выставлю time.Sleep, то ядро цп будет загружено на 100%. Вопрос: использование time.Sleep в данном случае оправдано или нужно переделывать архитектуру?
если в case ничего не попадает - выполняется default в цикле - скорее всего что-то не то у вас...
источник

а

а кто это in Go-go!
Andrey S
если в case ничего не попадает - выполняется default в цикле - скорее всего что-то не то у вас...
ну там тоже может быть блокировка с каналами, но вообще да
источник

AS

Andrey S in Go-go!
а кто это
ну там тоже может быть блокировка с каналами, но вообще да
ну вообще тогда в селект её вынести проще
источник

AF

Amir Fazleev in Go-go!
Andrey S
ну вообще тогда в селект её вынести проще
Тогда придется выносить проверку и в нескольких select'ах её вызывать... Но наверное это лучше, чем блокировать default
источник

AS

Andrey S in Go-go!
Amir Fazleev
Тогда придется выносить проверку и в нескольких select'ах её вызывать... Но наверное это лучше, чем блокировать default
заведите отдельный канал типа chan struct{} и пишите в него при добавлении пользователя, а сам канал добавьте в селект и по появлению данных проверяйте то, что делали в default
источник

AS

Andrey S in Go-go!
проблема тоже блин...
источник

AS

Andrey S in Go-go!
либо time.Ticker
источник

AF

Amir Fazleev in Go-go!
Andrey S
заведите отдельный канал типа chan struct{} и пишите в него при добавлении пользователя, а сам канал добавьте в селект и по появлению данных проверяйте то, что делали в default
Спасибо!
источник

AS

Andrey S in Go-go!
Amir Fazleev
Спасибо!
канал естественно буферизированный...
источник