Хм, запустил у себя версию с mutex и atomic - разница была, но не такая как в видео: 0.00041 против 0.00026, а иногда при нескольких вызовах подряд значения были практически одинаковы - так как при столь маленьких значениях по времени погрешность довольно большая. Может конечно мьютексы "ускорили" в последних версиях гошки, не знаю
@@КарлЛьвович-д8э Идентично. Для того чтоб было обратно. Нужны определенные условия В конечном счете получается так, что в одном случае быстрее с Атомик, в другом Мутекс. В одном случае быстрее в Горутинах, а в других в одной на много быстрее .)))) Такие дела )))
Интересный канеш цикл с CompareAndSwap) зачем делать проверку отрицания если можно проверить что вернет функция и написать в одну строку принт без return?)
Меня очень интересует map[string]int64, возможно ли как-то сделать чтобы атомик работал с ним? ибо мютекс не очень подходит, а информацию надо в мапе хранить.
Привет. Пока везде при работе с мапами встречал mutex, на самом деле есть еще специальная thread-safe мапа в пакете sync, возможно стоит ее попробовать: pkg.go.dev/sync#Map
Большое спасибо! Отлично! А почему ещё нет видео по REST API, JWT token, gRPC... Вы же сказали, что будет. Я всегда жду, но жаль, что автор почему-то нет.
func WriteWithAtomicValue() { start := time.Now() var counter atomic.Value var wg sync.WaitGroup counter.Store(1) wg.Add(1000) for i := 0; i < 1000; i++ { go func() { defer wg.Done() //time.Sleep(time.Nanosecond) counter.Store(counter.Load().(int) + 1) }() } wg.Wait() fmt.Printf("%T ", counter.Load()) fmt.Println(counter.Load()) fmt.Println(time.Now().Sub(start).Seconds()) } Всем ку Почему такой вариант вызывает DataRace?
Вы используете две атомарные операции, загрузить, увеличиваете потом сохранить. В это время другой поток может одновременно загрузить такое же значение и записать поверх
Благодарность за такую работу, очень занятно все смотреть, слушать. Кратко, по теме. Емко по информации. Спасибо огромное.
Спасибо, стараюсь)
Спасибо за ряд видео про конкурентность. Очень интересные и понятные уроки!
Спасибо за такое видео очень полезно
Спасибо. Как раз искал информацию по поводу дата рейсов, и скорости мютексов, гугол в рекомендации тебя поставил, спасибо)
Пожалуйста) Круто, не зря видос пилил)
@@thisisit7267 И да, продолжай заниматься этим, ибо по гоше нету хороших гайдов на русском языке)
Очень долго искал нечто подобное, спасибо Автору!
огромное спасибо за уроки!
Больше уроков не будет?(
поставил лайк, подписался
Спасибо за твой труд
Очень грамотные видео, Спасибо тебе огромное !!
Хм, запустил у себя версию с mutex и atomic - разница была, но не такая как в видео:
0.00041 против 0.00026, а иногда при нескольких вызовах подряд значения были практически одинаковы - так как при столь маленьких значениях по времени погрешность довольно большая.
Может конечно мьютексы "ускорили" в последних версиях гошки, не знаю
схожая ситуация только у меня mutex быстрее оказался почему-то:
Время работы atomic: 820.424µs
Время работы mutex: 463.135µs
@@КарлЛьвович-д8э Идентично. Для того чтоб было обратно. Нужны определенные условия
В конечном счете получается так, что в одном случае быстрее с Атомик, в другом Мутекс.
В одном случае быстрее в Горутинах, а в других в одной на много быстрее .))))
Такие дела )))
коммент для продвижения канала
эх еще бы видео про более новый atomic.Pointer и юзкейсы его использования
а для чего передавать i в горутину, i и так же в области видимости
Интересный канеш цикл с CompareAndSwap) зачем делать проверку отрицания если можно проверить что вернет функция и написать в одну строку принт без return?)
будет ли как то дальше плейлист типо rest-api?с различными вариантами авторизаций (basic, token, jwt?)
Да, будет
@@thisisit7267 мы все еще ждем(
Привет, скажи пожалуйста, а веб часть будет?
Привет, да, уже скоро начнем)
@@thisisit7267 про pprof и рефлексию уже Вы ответили, а будет ли кодогенерация?
@@ruauka Привет. Да)
Меня очень интересует map[string]int64, возможно ли как-то сделать чтобы атомик работал с ним? ибо мютекс не очень подходит, а информацию надо в мапе хранить.
Привет. Пока везде при работе с мапами встречал mutex, на самом деле есть еще специальная thread-safe мапа в пакете sync, возможно стоит ее попробовать: pkg.go.dev/sync#Map
@@thisisit7267 О, спасибо)
Большое спасибо! Отлично!
А почему ещё нет видео по REST API, JWT token, gRPC... Вы же сказали, что будет. Я всегда жду, но жаль, что автор почему-то нет.
atomic.Value очень неудачный пример с числами
Не суетись при изложении
не хами учителю
func WriteWithAtomicValue() {
start := time.Now()
var counter atomic.Value
var wg sync.WaitGroup
counter.Store(1)
wg.Add(1000)
for i := 0; i < 1000; i++ {
go func() {
defer wg.Done()
//time.Sleep(time.Nanosecond)
counter.Store(counter.Load().(int) + 1)
}()
}
wg.Wait()
fmt.Printf("%T
", counter.Load())
fmt.Println(counter.Load())
fmt.Println(time.Now().Sub(start).Seconds())
}
Всем ку
Почему такой вариант вызывает DataRace?
Вы используете две атомарные операции, загрузить, увеличиваете потом сохранить. В это время другой поток может одновременно загрузить такое же значение и записать поверх