На M1 у новой map наблюдаются проблемы в многопоточном режиме доступа
package main
import (
"sync"
"testing"
)
func BenchmarkMap(b *testing.B) {
b.Run("map", func(b *testing.B) {
var (
wg sync.WaitGroup
mu sync.RWMutex
)
m := map[int]int{}
for i := range b.N {
wg.Add(1)
go func() {
mu.Lock()
m[i] = i
mu.Unlock()
wg.Done()
}()
}
wg.Wait()
})
}
Swiss Map -
go test -v ./ -bench=BenchmarkMap
goos: darwin
goarch: arm64
pkg: test
cpu: Apple M1
BenchmarkMap
BenchmarkMap/map
BenchmarkMap/map-8 2043374 622.9 ns/op
PASS
ok test 2.088s
Swiss map - 1 CPU
GOMAXPROCS=1 go test -v ./ -bench=BenchmarkMap
goos: darwin
goarch: arm64
pkg: test
cpu: Apple M1
BenchmarkMap
BenchmarkMap/map
BenchmarkMap/map 2083174 545.1 ns/op
PASS
ok test 2.384s
Old Map
GOEXPERIMENT=noswissmap go test -v ./ -bench=BenchmarkMap
goos: darwin
goarch: arm64
pkg: test
cpu: Apple M1
BenchmarkMap
BenchmarkMap/map
BenchmarkMap/map-8 2166986 511.3 ns/op
PASS
ok test 2.296s
Old map - 1 CPU
GOMAXPROCS=1 GOEXPERIMENT=noswissmap go test -v ./ -bench=BenchmarkMap
goos: darwin
goarch: arm64
pkg: test
cpu: Apple M1
BenchmarkMap
BenchmarkMap/map
BenchmarkMap/map 2067202 574.8 ns/op
PASS
ok test 1.963s
Когда переезжал с php на go были такие же ощущения, но со временем это развеивается и с идиоматикой go начинаешь писать по-другому. Не стоит привязываться к конкретным фичам яп, это всего лишь инструмент. Та же аналогия из комментария выше - "я не говорю на французском из-за того,что там нет нескольких слов, которые мне нужны/нравятся". Попробуйте переосмыслить то, что используете на вашем яп и как это можно спроецировать на другой, откроете для себе много нового и интересного. Да, это выводит мозг из зоны комфорта, но это определенно улучшает восприятие и понимание того, что вы делаете.
Для самих же переменных, что используются внутри горутин память берётся с хипа (ограничены только размером "физического" хипа, т.е. объемом памяти сколько есть на машине).
Не нашел подтверждения этого утверждения. Разве аллокация памяти в горутинах происходит не в самом стеке этой горутины? А расширение стэковой памяти как раз идет за счет запроса выделения из общего хипа.
Кстати, хочу отдельно сказать про поиск работы по ИП внутри российского сегмента. При таком поиске стоит учитывать, что при длительном сотрудничестве с одной компанией, существуют риски появления вопросов у налоговой службы, т.к. такое сотрудничество может быть воспринят налоговой, как желание работодателя уклониться от выплаты налогов.
Это реальный кейс? И о каких длительных сроках идет речь? В моем понимании в РФ человек для своей деятельности может выбрать любой статус - работать как физ лицо, ип или же юр лицо . Для налоговой главное это плати и сдавай отчетные документы вовремя. А уклонение от налогов это по большей части скрытие своего реального дохода.
На M1 у новой map наблюдаются проблемы в многопоточном режиме доступа
Swiss Map -
Swiss map - 1 CPU
Old Map
Old map - 1 CPU
Когда переезжал с php на go были такие же ощущения, но со временем это развеивается и с идиоматикой go начинаешь писать по-другому. Не стоит привязываться к конкретным фичам яп, это всего лишь инструмент. Та же аналогия из комментария выше - "я не говорю на французском из-за того,что там нет нескольких слов, которые мне нужны/нравятся". Попробуйте переосмыслить то, что используете на вашем яп и как это можно спроецировать на другой, откроете для себе много нового и интересного. Да, это выводит мозг из зоны комфорта, но это определенно улучшает восприятие и понимание того, что вы делаете.
Не нашел подтверждения этого утверждения. Разве аллокация памяти в горутинах происходит не в самом стеке этой горутины? А расширение стэковой памяти как раз идет за счет запроса выделения из общего хипа.
Это реальный кейс? И о каких длительных сроках идет речь? В моем понимании в РФ человек для своей деятельности может выбрать любой статус - работать как физ лицо, ип или же юр лицо . Для налоговой главное это плати и сдавай отчетные документы вовремя. А уклонение от налогов это по большей части скрытие своего реального дохода.
Поддерживает ли werf какое то решение из коробки для multi-repo проектов аля микросервисов? Или же конфиги нужно мержить ручками?