История изменений
Исправление lbvf50txt, (текущая версия) :
строка buffer := make([]byte, 1024)
Архитектура io.Reader
такая, что на каждое чтение НЕ выделяется отдельный буфер. Буфер выделяется один раз, передается в метод Read
и там заполняется. Слайс в Golang — это практически указатель на массив.
должна быть внутри цикла : for { ?
В бенчмарке специально на кадждое чтение выделяется отдельный буфер, так как БЫЛО БЫ при НЕ правильной архитектуре программы, ЕСЛИ БЫ io.Reader
возвращал новый слайс (на новое выделение памяти), а не количество прочитанных байт.
Новый буфер выделяется на каждой итерации внутреннего for
перед вызовом метода Read
, чтобы эмулировать поведение ошибочной архитектуры.
type NotHowReaderIsDefined interface {
Read() (p []byte, err error)
}
Что описано в первом комментарии про буферы и сборщик мусора.
Исправление lbvf50txt, :
строка buffer := make([]byte, 1024)
Архитектура io.Reader
такая, что на каждое чтение НЕ выделяется отдельный буфер. Буфер выделяется один раз, передается в метод Read
и там заполняется. Слайс в Golang — это практически указатель на массив.
должна быть внутри цикла : for { ?
В бенчмарке специально на кадждое чтение выделяется отдельный буфер, так как БЫЛО БЫ при НЕ правильной архитектуре программы, ЕСЛИ БЫ io.Reader
возвращал новый слайс, а не информацию о успешности прочтения.
Новый буфер выделяется на каждой итерации внутреннего for
перед вызовом метода Read
, чтобы эмулировать поведение ошибочной архитектуры.
type NotHowReaderIsDefined interface {
Read() (p []byte, err error)
}
Что описано в первом комментарии про буферы и сборщик мусора.
Исправление lbvf50txt, :
строка buffer := make([]byte, 1024)
Архитектура io.Reader
такая, что на каждое чтение НЕ выделяется отдельный буфер. Буфер выделяется один раз.
должна быть внутри цикла : for { ?
В бенчмарке специально на кадждое чтение выделяется отдельный буфер, так как БЫЛО БЫ при НЕ правильной архитектуре программы, ЕСЛИ БЫ io.Reader
возвращал новый слайс, а не информацию о успешности прочтения.
Новый буфер выделяется на каждой итерации внутреннего for
перед вызовом метода Read
, чтобы эмулировать поведение ошибочной архитектуры.
type NotHowReaderIsDefined interface {
Read() (p []byte, err error)
}
Что описано в первом комментарии про буферы и сборщик мусора.
Исходная версия lbvf50txt, :
строка buffer := make([]byte, 1024)
Архитектура io.Reader
такая, что на каждое чтение НЕ выделяется отдельный буфер. Буфер выделяется один раз.
должна быть внутри цикла : for { ?
В бенчмарке специально на кадждое чтение выделяется отдельный буфер, так как БЫЛО БЫ при НЕ правильной архитектуре программы, ЕСЛИ БЫ io.Reader
возвращал новый слайс, а не информацию о успешности прочтения.
Буфер выделяется на каждой итерации внутреннего for, чтоб с эмулировать поведение ошибочной архитектуры:
type NotHowReaderIsDefined interface {
Read() (p []byte, err error)
}
Что описано в первом комментарии про буферы и сборщик мусора.