@gogolang

Страница 870 из 1630
The
27.02.2018
17:07:59
Можно шардить мапы, в каждой мапе есть RWMutex, сами сущности кеша через бинарный семафор и закрытый канал работают. Если канал закрыт, чтение мгновенное, отдаем значение. Если канал открыт, тогда за значением уже кто-то пришел, стоит очередь, и когда значение получено, канал закрывается и все получают свои значения. Т.о. чтение значения entity сопровождается чтением из канала в пустоту. Сами мапы можно и без RWMutex сделать на каналах. Но каналы по 100 нс выжирают. Это как раз ваш кейс, когда за одним значением пришло несколько горутин, все получат один и тот же ответ, полученный единоразово из базы или откуда-то.

Alexey
27.02.2018
17:10:08
В проде сейчас в среднем 800 запросов в секунду, но там пхп и тоже все оптимизированно, что даже на 10% проц не грузит.
Я когда впервые гошку пробовал, было откровение после пыха 5.6 , что время ответов с другой буквы м указываются.

The
27.02.2018
17:10:09
вы на глаз определили? или как? конечно держать извечно прогретый кеш и подменять указатель будет быстрее, но по памяти - вряд ли.

Google
The
27.02.2018
17:11:04
к слову, в вашем кейсе вместо того чтобы копить очередь на открытом канале, можно отдавать oldValue, который создан перед тем как пойти за значением

Daniel
27.02.2018
17:11:31
коллеги, что тут у вас за содомия?

Zver
27.02.2018
17:13:05
The
27.02.2018
17:13:10
Вы не внимательно читали.
это я к своему посту добавил

Zver
27.02.2018
17:14:30
коллеги, что тут у вас за содомия?
С кэшами, мютексами и каналами.

Andrey
27.02.2018
17:14:59
Так у вас все равно каналы есть. И лочки.
Есть один канал, как минимум. Лочек "своих" нет. Вы к чему это сейчас?

Zver
27.02.2018
17:16:16
Есть один канал, как минимум. Лочек "своих" нет. Вы к чему это сейчас?
На каждое обращение к каналу используется мютекс.

Andrey
27.02.2018
17:16:44
коллеги, что тут у вас за содомия?
Может вы подскажете. Вопрос: может ли возникнуть ситуация, когда в состоянии гонки "побьется" указатель?

Daniel
27.02.2018
17:17:09
практически - не надо это выяснять. хотите атомарно подменять указатель - используйте atomic

Google
Andrey
27.02.2018
17:17:57
теоретически - да
я слышал, что ось защищает от такого. но моих знаний не хватает, чтобы нагуглить как это внутри устроено.

Maxim
27.02.2018
17:18:07
Он не хочет атомарно)

The
27.02.2018
17:18:29
подменить поинтер это вообще атомарная операция, каков смысл на ней экономить?

Andrey
27.02.2018
17:19:04
подменить поинтер это вообще атомарная операция, каков смысл на ней экономить?
здесь вопрос не в этом, а в принципе разобраться как устроена работа с памятью

Andrey
27.02.2018
17:19:44
The
27.02.2018
17:20:06
я бы мог дать вам ссылку, но вы сильно язвите, поэтому не буду

Andrey
27.02.2018
17:20:34
я бы мог дать вам ссылку, но вы сильно язвите, поэтому не буду
двойное спасибо. извините, никак не могу побороть в себе эту черту.

Vladimir
27.02.2018
17:20:51
я слышал, что ось защищает от такого. но моих знаний не хватает, чтобы нагуглить как это внутри устроено.
Может возникнуть следующее: 1. Разные треды получат разные указатели. 2. Будет битый указатель вникуда. Что будет - вопрос хороший, зависит от архитектуры и везения.

Vladimir
27.02.2018
17:21:37
1 - такая ситуация устраивает. 2 - вот этого хотелось бы избежать.
Это сильно зависит от архитектуры и вообще реализации даже

То есть на x86 на разных ЦПУ может вести себя по разному

И кстати очень интересный вопрос не подберёт ли Гц структуру в первом случае прямо в процессе работы

Andrey
27.02.2018
17:23:42
И кстати очень интересный вопрос не подберёт ли Гц структуру в первом случае прямо в процессе работы
Не должен. Указатель на структуру в горутинах, которые успели получить его, должен замкнуться.

Про атомик я уже писал, не хочет. )
Все ок, буду использовать атомик)

Vladimir
27.02.2018
17:24:07
Когда Гц прошел и получил видение как тред1

А тред2 из кэша цпу получил старый указатель после уже mark фазы гц

Google
Andrey
27.02.2018
17:25:42
А тред2 из кэша цпу получил старый указатель после уже mark фазы гц
Да и после этого он пойдет проверять ссылки в живых горутинах, найдет её там и не убьет данные. Правильно думаю?

Vladimir
27.02.2018
17:26:08
@VesninAndrey одна из проблем атомарности операций что неатомарный store не гарантирует инвалидацию кэша соседних ядер или цпу

Поэтому теоретически может быть ситуация когда в кэше старый указатель

И его получит тред после того как гц прибрал к рукам данные или закончил фазу mark

Andrey
27.02.2018
17:26:53
а, я понял

Vladimir
27.02.2018
17:27:01
Хотя я не очень уверен

Andrey
27.02.2018
17:27:45
Т.е. не было живых горутин, гц пометил указатель, и тут новая горутина получает этот указатель из кеша и кровь кишки паника

прикольно

Andrey
27.02.2018
17:29:12
Огромное спасибо за дискуссию! Очень познавательно

BlackTrojan
27.02.2018
17:40:23
А может кто-нибудь объяснить мне, тупому, зачем нужно измерять рэйсы (go run —race main.go) и почему плохо, когда находятся эти самые рэйсы?

Andrey
27.02.2018
17:41:10
Первые 5 минут - ответ на ваш вопрос

Vladimir
27.02.2018
17:54:25
Рейсы плохи тем что у тебя после них неопределенное состояние структур данных которые читались или писались одновременно

Aleksandr
27.02.2018
18:50:16
https://github.com/martingallagher/runes/blob/master/tables.go#L34 коллеги, а вот это на стадии компиляции высчитывается?

Oleh
27.02.2018
18:54:32
нет

init запускается при старте програмы

Aleksandr
27.02.2018
18:55:12
вот и я думаю - странная оптимизация

Vladimir
27.02.2018
18:55:45
вот и я думаю - странная оптимизация
Ну на стадии выполнения то будет все

Google
Aleksandr
27.02.2018
19:00:56
Ну на стадии выполнения то будет все
в рантайме перебрать 150 т смиволов - так себе

даже больше. валидных 150т

Vladimir
27.02.2018
19:03:49
Зато потом будут флаги по которым в теории быстрее выборка

Но не факт

Slava
27.02.2018
19:08:15
Нормальный звук! http://golangshow.com/episode/2018/02-27-119b/

Aleksandr
27.02.2018
19:08:40
Зато потом будут флаги по которым в теории быстрее выборка
но можно было сгенерить сразу таблицы, как это сделано в родном unicode (на который ссылается данный пакет)

Admin
ERROR: S client not available

Aleksandr
27.02.2018
19:12:02
Ну да, но так они не зависят от рантайма
а зачем им зависеть, если таблицы по которым работают функции пакета unicode, все равно сгенерены заранее?

Aleksandr
27.02.2018
19:14:31
ну да, но сомнительно. лучше скрипт для апдейта прикладывать

Aleksandr
27.02.2018
19:17:08
не нагружаешь рантайм ненужными вычислениями

перегенерить надо раз в год

Vladimir
27.02.2018
19:18:36
Что не так страшно

anthof
27.02.2018
20:59:56
Всем ку. Подскажите какое нибудь хорошее руководство по созданию менеджера сессий? а то я читаю одно, но не все понятно, откуда что берется...

Google
anthof
27.02.2018
21:04:09
для веб приложения, что бы подойти к организации авторизации, я так понимаю, нужно понять как работает сессия и сделать менеджер сесии

Kirill
27.02.2018
21:07:46
всем привет, только вкатываюсь в го, возник вопрос если json api post ожидает какое то поле int, а поле не приходит go парсит это поле как 0. Можно как то узнать это в поле пришел ноль, или поле вообще не пришло? не смог нагуглить(

Nik
27.02.2018
21:15:04
Вариант 2 - сессия равна куке, и ты хранишь ее в какомнить горячем хранилище, с экспайром

Di0niz
27.02.2018
21:20:28
Прошу подсказать, как можно протестировать main(), чтобы на вход передать строку со значениями (или stream) //main_test.go func TestMain(t *testing.T) { os.Stdin.Write([]byte("333\n")) main() } //main.go func main() { var N int fmt.Scan(&N) fmt.Println("read: ", N) }

Kirill
27.02.2018
21:21:34
Используй указатель на int*
спасибо, теперь норм

anthof
27.02.2018
21:23:05
Есть вариант 1- у тебя фронт работает с http2и там есть прям сессии
ну я все генерирую на сервере и на фронте у меня только 1 базовый шаблон) по этому я так понимаю меня интересует вариант 2.

anthof
27.02.2018
21:28:51
Да) любое nosql , которое тебе больше любо бери в руки, и вперёд)
nosql это любая такая база для хранения сессий? я просто совсем слабый пока, мало что понимаю)

Nik
27.02.2018
21:29:16
Если после останутся вопросы - заходи еще?

anthof
27.02.2018
21:31:08
Это семейство хранилищ. Лучше сходи погугли
так а поконкретней что лучше выбрать? по описаниям я все равно не пойму что для меня лучше, а постоянно переучиваться или учить все, у меня времени не хватает. По этому нужно что нить одно)

anthof
27.02.2018
21:33:54
Какую нагрузку планируешь?
личный учебный проект, пару человек зайдет посмотреть, что я с дргом накуралесим)

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