heavycharged
Вы не внимательно читали.
это я к своему посту добавил
Zver
коллеги, что тут у вас за содомия?
С кэшами, мютексами и каналами.
Andrey
Так у вас все равно каналы есть. И лочки.
Есть один канал, как минимум. Лочек "своих" нет. Вы к чему это сейчас?
Zver
Есть один канал, как минимум. Лочек "своих" нет. Вы к чему это сейчас?
На каждое обращение к каналу используется мютекс.
Andrey
коллеги, что тут у вас за содомия?
Может вы подскажете. Вопрос: может ли возникнуть ситуация, когда в состоянии гонки "побьется" указатель?
Daniel
практически - не надо это выяснять. хотите атомарно подменять указатель - используйте atomic
Andrey
теоретически - да
я слышал, что ось защищает от такого. но моих знаний не хватает, чтобы нагуглить как это внутри устроено.
Maxim
Он не хочет атомарно)
heavycharged
подменить поинтер это вообще атомарная операция, каков смысл на ней экономить?
Andrey
подменить поинтер это вообще атомарная операция, каков смысл на ней экономить?
здесь вопрос не в этом, а в принципе разобраться как устроена работа с памятью
heavycharged
я бы мог дать вам ссылку, но вы сильно язвите, поэтому не буду
Andrey
я бы мог дать вам ссылку, но вы сильно язвите, поэтому не буду
двойное спасибо. извините, никак не могу побороть в себе эту черту.
Vladimir
я слышал, что ось защищает от такого. но моих знаний не хватает, чтобы нагуглить как это внутри устроено.
Может возникнуть следующее: 1. Разные треды получат разные указатели. 2. Будет битый указатель вникуда. Что будет - вопрос хороший, зависит от архитектуры и везения.
Vladimir
1 - такая ситуация устраивает. 2 - вот этого хотелось бы избежать.
Это сильно зависит от архитектуры и вообще реализации даже
Vladimir
То есть на x86 на разных ЦПУ может вести себя по разному
Vladimir
И кстати очень интересный вопрос не подберёт ли Гц структуру в первом случае прямо в процессе работы
Andrey
И кстати очень интересный вопрос не подберёт ли Гц структуру в первом случае прямо в процессе работы
Не должен. Указатель на структуру в горутинах, которые успели получить его, должен замкнуться.
Andrey
Про атомик я уже писал, не хочет. )
Все ок, буду использовать атомик)
Vladimir
Когда Гц прошел и получил видение как тред1
Vladimir
А тред2 из кэша цпу получил старый указатель после уже mark фазы гц
Andrey
А тред2 из кэша цпу получил старый указатель после уже mark фазы гц
Да и после этого он пойдет проверять ссылки в живых горутинах, найдет её там и не убьет данные. Правильно думаю?
Vladimir
@VesninAndrey одна из проблем атомарности операций что неатомарный store не гарантирует инвалидацию кэша соседних ядер или цпу
Vladimir
Поэтому теоретически может быть ситуация когда в кэше старый указатель
Vladimir
И его получит тред после того как гц прибрал к рукам данные или закончил фазу mark
Andrey
а, я понял
Vladimir
Хотя я не очень уверен
Andrey
Т.е. не было живых горутин, гц пометил указатель, и тут новая горутина получает этот указатель из кеша и кровь кишки паника
Andrey
прикольно
Andrey
Огромное спасибо за дискуссию! Очень познавательно
Anonymous
А может кто-нибудь объяснить мне, тупому, зачем нужно измерять рэйсы (go run —race main.go) и почему плохо, когда находятся эти самые рэйсы?
Andrey
Первые 5 минут - ответ на ваш вопрос
Vladimir
Рейсы плохи тем что у тебя после них неопределенное состояние структур данных которые читались или писались одновременно
Aleksandr
https://github.com/martingallagher/runes/blob/master/tables.go#L34 коллеги, а вот это на стадии компиляции высчитывается?
Oleh
нет
Oleh
init запускается при старте програмы
Aleksandr
вот и я думаю - странная оптимизация
Vladimir
вот и я думаю - странная оптимизация
Ну на стадии выполнения то будет все
Aleksandr
Ну на стадии выполнения то будет все
в рантайме перебрать 150 т смиволов - так себе
Aleksandr
даже больше. валидных 150т
Vladimir
Зато потом будут флаги по которым в теории быстрее выборка
Vladimir
Но не факт
Slava
Нормальный звук! http://golangshow.com/episode/2018/02-27-119b/
Aleksandr
Зато потом будут флаги по которым в теории быстрее выборка
но можно было сгенерить сразу таблицы, как это сделано в родном unicode (на который ссылается данный пакет)
Yegor
Aleksandr
Ну да, но так они не зависят от рантайма
а зачем им зависеть, если таблицы по которым работают функции пакета unicode, все равно сгенерены заранее?
Aleksandr
ну да, но сомнительно. лучше скрипт для апдейта прикладывать
Vladimir
Чем лучше?
Aleksandr
не нагружаешь рантайм ненужными вычислениями
Aleksandr
перегенерить надо раз в год
Vladimir
Что не так страшно
Антон
Всем ку. Подскажите какое нибудь хорошее руководство по созданию менеджера сессий? а то я читаю одно, но не все понятно, откуда что берется...
Nik
Чьи сессии хотя бы
Антон
для веб приложения, что бы подойти к организации авторизации, я так понимаю, нужно понять как работает сессия и сделать менеджер сесии
Kirill
всем привет, только вкатываюсь в го, возник вопрос если json api post ожидает какое то поле int, а поле не приходит go парсит это поле как 0. Можно как то узнать это в поле пришел ноль, или поле вообще не пришло? не смог нагуглить(
Nik
Вариант 2 - сессия равна куке, и ты хранишь ее в какомнить горячем хранилище, с экспайром
Di0niz
Прошу подсказать, как можно протестировать 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
Используй указатель на int*
спасибо, теперь норм
Антон
Есть вариант 1- у тебя фронт работает с http2и там есть прям сессии
ну я все генерирую на сервере и на фронте у меня только 1 базовый шаблон) по этому я так понимаю меня интересует вариант 2.
Антон
Да) любое nosql , которое тебе больше любо бери в руки, и вперёд)
nosql это любая такая база для хранения сессий? я просто совсем слабый пока, мало что понимаю)