LINUX.ORG.RU

История изменений

Исправление 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)
}

Что описано в первом комментарии про буферы и сборщик мусора.