@gogolang

Страница 322 из 1630
Серж
23.06.2017
09:04:57
в го не делает

я так понял, что flush нужен bufio.Writer это в нем буфер, если вызвать file.Sync - это будет системный вызов и если из bufio.Writer байты не пришли, то записано тоже ничего не будет

Димка
23.06.2017
09:05:48
вру :)

Andrew
23.06.2017
09:05:57
Я чот ни разу не вызывал Flush, но все файлы у меня записываются целиком. И брат жив. ))

Google
Michael
23.06.2017
09:06:28
fsync & flsuh - are different things

и вообще - во всём виноват с++

Серж
23.06.2017
09:06:51
да, приучает к RAII

Michael
23.06.2017
09:07:44
не, RAII кое-где упоминается

Серж
23.06.2017
09:08:07
кстати, зачем использовать bufio, если ОС сама буферизирует файловые операции?

Michael
23.06.2017
09:08:12
а так - целься и стреляй куда и во что хочешь

Серж
23.06.2017
09:08:19
дабл буфер? чтобы еще быстрее?

Michael
23.06.2017
09:08:23
причём разные компиляторы - по-разному

система сама шедулит ио

Andrew
23.06.2017
09:09:20
система сама шедулит ио
Шедулит только запись, а не чтение. Читать наперёд не умеет ))

Michael
23.06.2017
09:09:30
при падении софта система фсюнкнет буферы и данные попадут на винт

я б не был так уверен

так как есть кэши и на чтение

Google
Michael
23.06.2017
09:10:15
особенно когда читаешь блоками

Andrew
23.06.2017
09:10:15
Ок, снизил уверенность на 50% ))

особенно когда читаешь блоками
Поэтому и нужен в go buffer, т.к. ОС не знает сколько там тебе надобно.

Антон
23.06.2017
09:10:51
кстати, зачем использовать bufio, если ОС сама буферизирует файловые операции?
а ты умеешь управлять буферизацией ОС? Ты можешь ей сказать читать до опредёлнного символа и тп?

Michael
23.06.2017
09:10:58
флаш из буфио нужен для кастомной реализации буфера

писать в буфер в озу куда быстрее чем дергать ось

ось же оптимизирует запись в целом на винт

Серж
23.06.2017
09:12:12
я говорю именно про этот случай

Michael
23.06.2017
09:13:06
апи то системное используется

Серж
23.06.2017
09:13:09
у него там слайс в памяи уже готовый он из него пишет в bufio

Michael
23.06.2017
09:13:46
надо выпить и слайсом бекона закусить

Andrew
23.06.2017
09:15:52
надо выпить и слайсом бекона закусить
Из какого package берёшь бекон?

Требую поделиться беконом на github'е

Димка
23.06.2017
09:21:55
я говорю о том, что в плюсах flush вызывается неявно при освобождении ресурса
а есть способ что бы не вызывался flush при освобождении ресурса?

Серж
23.06.2017
09:22:23
я не знаю

наверное нет

может есть метод который можно вызвать чтобы предотвратить flush в деструкторе

может там есть bool, что flush уже был вызван и если новые данные не добавляются, то в деструкторе flush не вызывается

Димка
23.06.2017
09:23:48
просто если не надо записывать данные, (в случаи ошибки например) то в Го реализация лучше

Google
Серж
23.06.2017
09:24:01
это то - о чем программист на высокоуровневом языке не думает

так ты проверяй на ошибку данные до того, как в ostream писать

Димка
23.06.2017
09:25:04
это то понятно, но всякое же бывает

anton
23.06.2017
09:34:26
ну вы развели тут :)

Мерлин
23.06.2017
12:51:22
GetStream/vg: Virtualgo: A dep compatible solution to problems caused by the vendor directory https://github.com/getstream/vg

Aleksandr
23.06.2017
13:14:46
а кто-нибудь в курсе есть ли в стандартной библиотеке (net/http) нормальные возможности для записи множества заголовков с одним именем? Если Set-Cookie разруливается отдельно, то для заложенных в RFC возможностей вроде Cache-Control: no-cache, no-storeкоторый эквивалентен Cache-Control: no-cache Cache-Control: no-storeкак быть уже непонятно совсем

Aleksandr
23.06.2017
13:16:23
насколько помню два раза добавив хэдер с разным значением такой результат и получишь

Aleksandr
23.06.2017
13:17:11
Aleksandr
23.06.2017
13:17:30
ну так все правильно

мап слайсов

// Add adds the key, value pair to the header. // It appends to any existing values associated with key. func (h Header) Add(key, value string) { textproto.MIMEHeader(h).Add(key, value) }

Monday Begins on Saturday
23.06.2017
18:10:08
Есть объект с RWMutex'ом и двумя методами Read(key string) (err error, value int) и Write(key string, val int) (err error). Какой можно написать unit-тест что бы проверить, что код потокобезопасный? Сначала думал создать 10 горутин и запустить в них цикл со счетчиком до 100, где каждая горутина бы получала доступ к одному и тому же ключу и приплюсовывала 1, тогда если бы по окончанию работы на Read выводилось значение 1000, то тест был пройден. Но тут мьютекс внутри и замыкается/размыкается внутри методов и так не получится сделать

Slava
23.06.2017
18:17:35
Запускай тест с ключом -race

Тест что ты описываешь выше - не верный, так как он предполагает атомарность на группу вызовов (read/write)

Vasily
23.06.2017
18:26:32
@m0sth8 привет! можно вопрос - как реализовать тексттовое меню, только с подъёмом вверх по иерархии? что можешь посоветовать?

Vasily
23.06.2017
18:27:01
@m0sth8 я это, один и подслушателей голанг шоу)

респект за подкаст

Monday Begins on Saturday
23.06.2017
18:28:03
Я вот и не знаю какой тест ещё придумать
Наверное уже есть какие-то общие для всех языков способы протестировать такой код

Google
anton
23.06.2017
19:13:03
респект за подкаст
а что за подкаст? для тех кто не в теме..

Vasily
23.06.2017
19:13:28
http://golangshow.com

anton
23.06.2017
19:29:18
Slava
23.06.2017
21:08:50
Я вот и не знаю какой тест ещё придумать
тест с -race поломается, если доступ к полю у тебя будет не защищён. Но защита поля на запись и чтения не значит что тебе не надо защищать более сложные операции

можешь рассказать более подробно, что ты пытаешься протестировать?

Slava
23.06.2017
21:14:28
да, иначе не понять, может у тебя структура только внутри одной горутины всегда работает

Monday Begins on Saturday
23.06.2017
21:17:25
да, иначе не понять, может у тебя структура только внутри одной горутины всегда работает
то есть впринципе мне хватит теста который запустит 100 горутин в которых будут выполняться случайные операции записи/чтения? Я хотел еще в конце теста дожидаться окончания всех горутин и сравнивать результат с ожидаемым.

Monday Begins on Saturday
23.06.2017
21:19:53
окей. поставлю вопрос по другому. Допустим нет -race, как мне проверить что логика не нарушилась?

Серж
23.06.2017
21:20:28
никак, тесты могут показать наличие ошибок, а не их отсутствие

Slava
23.06.2017
21:21:34
если у тебя не compare and swap, то ты не можешь инкрементить без лока на всю структуру на несколько операций

Slava
23.06.2017
21:24:01
нет

Google
Slava
23.06.2017
21:24:24
рейс видит, что ты атомарно читаешь и атомарно пишешь

Michael
23.06.2017
21:24:33
как закончите, по результатам оформите статью?

Slava
23.06.2017
21:24:41
но он не видит, что ты хочешь атомарно прочитать и записать в одной транзакции

Monday Begins on Saturday
23.06.2017
21:25:47
но он не видит, что ты хочешь атомарно прочитать и записать в одной транзакции
Тогда наверное вопрос как проверить, что операции точно являются атомарными?

Vladimir
23.06.2017
21:25:55
но он не видит, что ты хочешь атомарно прочитать и записать в одной транзакции
Он не видит что ты хочешь, но при этом если без лока и атомиков сделаешь параллельные вещи даст по рукам

Monday Begins on Saturday
23.06.2017
21:26:04
Что-то я короче загоняюсь

Vladimir
23.06.2017
21:26:09
И используешь его

Slava
23.06.2017
21:27:23
Он не видит что ты хочешь, но при этом если без лока и атомиков сделаешь параллельные вещи даст по рукам
наверное мы про разное, у топикстартера лок на операцию чтения, лок на операцию записи. топикстартер хочет делать чтение, инкрементить и делать запись (не смотря на то, что там уже может быть другое значение) - рейс такое разрешает в его модели данных

Monday Begins on Saturday
23.06.2017
21:28:24
Вот пример кода: https://gist.github.com/shelomentsevd/00388cb9e19a4bad0a61fed784f2b3cb

Slava
23.06.2017
21:38:36
ага

ты никак не можешь инкрементировать здесь

только через внешнюю синхронизацию

Monday Begins on Saturday
23.06.2017
21:41:29
ага

Страница 322 из 1630