@gogolang

Страница 856 из 1630
Daniel
23.02.2018
22:26:14
это из сети, или с диска? если с диска - надо буферизованный ридер использовать

Nik
23.02.2018
22:34:44
Циклом читаю 64, потом смотрю сколько данных, читаю их, все склеиваю и шлю на хендлинг

Daniel
23.02.2018
22:48:34
вот тут тоже хорошо бы буферизацию приспособить

Google
Daniel
23.02.2018
22:48:48
чтобы не на каждое чтение сискол был

Marlik
23.02.2018
23:21:39
оу, оказывается линтер не стоял... сколько я о себе узнал и о своём коде када поставил)))

Slava
23.02.2018
23:25:41
А в мае есть какие-то интересные конференции в россии??

Let Eat
23.02.2018
23:26:41
Не те буферы крутите. Побробуйте TCPConn обернуть в https://golang.org/pkg/bufio/#NewReader чтобы сисколы не дергать часто

Nik
23.02.2018
23:27:31
Или я чего то не умею

Let Eat
23.02.2018
23:27:49
Пусть плавает

Оно читает кусками, а вы из него побайтово

Nik
23.02.2018
23:29:09
(Наверно писать лучше тоже также)

Спасибо за мысль, завтра попробую закодить

Кстати, кто завтра в Badoo идёт?

Google
Kirill
24.02.2018
02:01:28
Zver
24.02.2018
05:07:33
Такие буферы гигантские. Это же если соединений тысячи, они всю память сжирать будут.

Marlik
24.02.2018
05:23:57
Кстати, кто завтра в Badoo идёт?
Так тама одни пэхэпэшнеги имхо.

Zver
24.02.2018
06:10:19
Так тама одни пэхэпэшнеги имхо.
Вроде бы же и на гоу какие-то сервисы делают.

Yura
24.02.2018
06:15:48
Если мапа с функциями сожрала память, значит ты пихал в нее жирные замыкания. А вообще, тот же самый тарантул использует асинхронный протокол, и драйвера спокойно выжимают сотни тысяч rps без всякого трэша, который тебе @onokonem тулит. Правда, с другим трэшем. Вот один драйвер: https://github.com/tarantool/go-tarantool Вот другой: https://github.com/viciious/go-tarantool Второй, думаю, читать полегче будет. (Первый - мой на половину. На ту половину, что читать труднее ? )

Marlik
24.02.2018
06:18:16
Вроде бы же и на гоу какие-то сервисы делают.
Ну вот видео, да они как раз чото пилить на го начали https://www.youtube.com/watch?v=uO268voCGwA&t=853s

Yura
24.02.2018
06:51:37
Да чтобы мапа с функциями сожрала десятки гигов, там размер ее должен на милионы исчисляться наверное.
Проблема не в мапе, а в точ, что в нее положили. Если каждое замыкание с собой случайно по мегабайту захватило, то все получится. Другой аспект: если мапа в каналы, то этих каналов кто-то ждёт, и получается естественный тротлинг. А в мапу замыканий можно пихать "без остановки". Но это тоже гипотеза.

Вообще, каждый канал весит около 200 байт (не считая буфера под значения). А func - от 8ми байт. Вопрос только, что func в себя замкнул.

Zver
24.02.2018
06:56:04
В замыкании мегабайт иметь тоже постараться надо. Массивные данные в основном ссылочные и в куче валяются. В общем там какая-то хрень. )

Yura
24.02.2018
06:57:03
Замыкается ведь не "стэк", весь граф достижимых по ссылкам объектов.

"замыкается" - это не значит "копируется". Это значит "не умрет раньше замыкания".

BTW, BlackTrojan чьих рук дело? Давай поговорим лично, зачем прячешься?

Zver
24.02.2018
07:02:10
BTW, BlackTrojan чьих рук дело? Давай поговорим лично, зачем прячешься?
Вам тоже пришло сообщение с гифками только что?

Yura
24.02.2018
07:02:51
Да. Думал, что это личное. Видимо, кто-то просто по чату спамит.

Yura
24.02.2018
07:03:41
Или тебя взломали, или ты - гондон.

BlackTrojan
24.02.2018
07:03:57
Yura
24.02.2018
07:05:05
Не знаю.
Хммм... Ну ты определись.

Google
BlackTrojan
24.02.2018
07:05:20
Хммм... Ну ты определись.
Ответ неправильный.

Yura
24.02.2018
07:05:40
Похоже, это бот.

BlackTrojan
24.02.2018
07:06:07
Похоже, это бот.
Ответ неправильный. Клуб кожевников два блока вниз.

Andrew
24.02.2018
07:20:24
Yura
24.02.2018
07:40:46
Минимал. Анмапшал, печать сообщения, маршал, отправка того же сообщения обратно
Я может тогда не правильно понял. Это клиент, или сервер?

Если сервер, то зачем мапа?

Nik
24.02.2018
07:41:24
Клиентов много, общения через сервер, каждый клиент имеет свои уникальные функции

Yura
24.02.2018
07:42:10
Клиент
А зачем обратно отсылаешь?

Nik
24.02.2018
07:42:42
Бенч тесты кстати накрутил, анмаршал/маршал работает быстро

Yura
24.02.2018
07:48:38
В общем: замыкания - это клёво. Я люблю замыкания, хоть это и не Go-way. Но в цикле чтения из сокета можно звать только легкие замыкания: например, ту же посылку в канал/закрытие канала (вариант WaitGroup.Done() ). Ещё вместо замыкания можно использовать интерфейс, если нужно более одной функции.

Основной затык с этой асинхронщиной: как правильно пайплайн организовать. Обычно делают одну пишущую горутину, и одну читающую. Запросы пишущей едут по каналу. Читающая закрывает запросы (выбирая их из мапы). Надеюсь, ты примерно так и сделал. Второй затык: как ту саму мапу заполнять. Если под одним мьютексом, то больше 100крпс в среднем не выходит, по разным причинам. Потому приходится шардить мапу, чтобу а шарда был свой мьютекс. Если цель - максимальный перформанс, то маршалить нужно в клиентской горутине. Если же в реальности меньше 100krps, то может оказаться выгоднее в пишущей горутине (если будет успевать), т.к. тогла запросы будут чаще в нее пачками попадать. Btw если слать по одному запросу в канал в сторону писателя, то это тот же мьютекс (канал реализован через мьютекс). Я у себя нагребаю слайс запросов, но в канал шлю номер шарда когда добавляю первый запрос в слайс шарда.

Nik
24.02.2018
07:55:58
Основной затык с этой асинхронщиной: как правильно пайплайн организовать. Обычно делают одну пишущую горутину, и одну читающую. Запросы пишущей едут по каналу. Читающая закрывает запросы (выбирая их из мапы). Надеюсь, ты примерно так и сделал. Второй затык: как ту саму мапу заполнять. Если под одним мьютексом, то больше 100крпс в среднем не выходит, по разным причинам. Потому приходится шардить мапу, чтобу а шарда был свой мьютекс. Если цель - максимальный перформанс, то маршалить нужно в клиентской горутине. Если же в реальности меньше 100krps, то может оказаться выгоднее в пишущей горутине (если будет успевать), т.к. тогла запросы будут чаще в нее пачками попадать. Btw если слать по одному запросу в канал в сторону писателя, то это тот же мьютекс (канал реализован через мьютекс). Я у себя нагребаю слайс запросов, но в канал шлю номер шарда когда добавляю первый запрос в слайс шарда.
Чтение/запись так и сделал (+плюс пишут, что методы tcpconn потокобезопасны, хочу попробовать писать лично из зендлера)

Маршалю/анмаршалю как раз на хендлере.

Google
Yura
24.02.2018
07:57:42
А вообще, какой боевой rps предполагается? Предлагаю исходить из него. И если какая-то простая схема его перекрывает в два-три раза, то лучше остановиться на ней, и не усложнять.

Nik
24.02.2018
07:58:02
А мапа инится до старта обмена, в нее закладываются замыкания по ключам, дальше только чтение. Я ее даже без мьютексов собрал, учитывая что она юзается только на чтение

Nik
24.02.2018
08:00:29
А что является ключом мапы?
Тип сообщения. 4байта из сообщения, переведённые в стринг

SAVE/GET_/итд

На хендинге выбираю именно эти 4 байта, по ним хендлю, и сырое сообщение кидаю в канал (или в замыкание)

Admin
ERROR: S client not available

Yura
24.02.2018
08:03:17
Почему мне это сервер напоминает, а не клиент?

Nik
24.02.2018
08:04:29
Почему мне это сервер напоминает, а не клиент?
Хз. Фактически это клиент, потому что сервер роутит сообщения по микроскосервисам

А сам микросервис можно по сути и сервером обозвать)) он хендлит запросы для него, и обращается к соседям по необходимости

Nik
24.02.2018
08:05:59
Ок) пусть будет)

Это мне ща погоды не сильно поменяет

Zo zo
24.02.2018
08:06:20
Коллеги, подскажите переползающему на го. Есть protobuf-структура (Event) и обертка для массива этих структур (Events), тоже protobuf. Есть логика, которая получает через канал эти события (Event) и при определенных условиях, собирает пачку событий, запаковывает их в Events и через proto.Marshal сериализует их в файлик в бинарном виде. Понадобилось сделать аналогично для другой структуры, пытаюсь понять как правильно вынести привязку именно к этим Event(s), что бы логика сбора, сериализации и записи в файл осталась в одном месте.

Nik
24.02.2018
08:06:35
И да, вопрос сбоку - чем плох митап баду? (Может я зря проснулся так рано)

Yura
24.02.2018
08:10:25
Мало того, я не считаю, что все пхпшники .... Наверняка те, что работают в Badoo, адекватные люди, у которых можно чему-то научиться.

Google
Никита
24.02.2018
08:16:50
Я в мск проездом, заодно решил забежать на митапчики. А Москва огромная

Yura
24.02.2018
08:16:55
Если ты зарегался, думаю, пустят

Никита
24.02.2018
08:18:38
Зарегался.

Yura
24.02.2018
08:19:02
Спросил тут в холле: до 12ти будут в холле ждать. После 12ти будет сложнее.

Никита
24.02.2018
08:19:16
Спасибо

Marlik
24.02.2018
08:22:05
Там вообще делать нечего хотите сказать?)
Не хочу, наверняка полезно такие мероприятия посещать.

Zver
24.02.2018
08:25:03
На хендинге выбираю именно эти 4 байта, по ним хендлю, и сырое сообщение кидаю в канал (или в замыкание)
А зачем в стринг переводить? Хотя конечно это погоды не сделает. Если есть возможность, то переиспользовать буферы. И в бенче посмотреть где память, где сколько памяти используется. ... Кстати, не помню уже, показывает профилер использование памяти или нет, но можно через него прогнать. Насколько понимаю, там задача то не особо сложная, чтобы требования к памяти были большие.

Marlik
24.02.2018
08:25:31
Люди подскажите, поставил dep, и ругань на sqlite ../../go/src/rzn/db.go:7:4:error: could not import github.com/mattn/go-sqlite3 (type-checking package "rzn/vendor/github.com/mattn/go-sqlite3" failed (/home/marlik/go/src/rzn/vendor/github.com/mattn/go-sqlite3/error.go:14:17: invalid constant type invalid type)) (gotype) Может кто встречался, куда копать-то?

Michael
24.02.2018
08:48:12
vgo ещё никто не щупал?

Nik
24.02.2018
09:12:37


Yura
24.02.2018
09:13:45
а какой именно треш я втуливаю?
В основном я на switch среагировал. Но большей части я, наверное, был не прав. Прошу прощения.

Marlik
24.02.2018
10:07:32
я gotype выключаю всегда. он туповат, и репортит ерунду часто
А как вы его отключили? Что-то боязно его сносить.

Artem
24.02.2018
10:21:42
А как вы его отключили? Что-то боязно его сносить.
lintOnSave https://code.visualstudio.com/docs/languages/go#_build-lint-and-vet

но в code по умолчанию сейчас он все равно не используется, там golint

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