
Dmitri
24.06.2018
08:00:33
in64 - 64 бита

many-faced
24.06.2018
08:01:24
значит, можно поуменьшить

Dmitri
24.06.2018
08:01:45
когда ты говоришь ему value / 256 - он возвращает тупо такой же int64, только убив в нули все, кроме последних 8 бит

Google

Dmitri
24.06.2018
08:02:10
грабли могут, конечно, быть
возможно, он тебе день отрицательный вернет
кстати, да, скорее всего вернет
но там уже сам костыль можешь вставить)

many-faced
24.06.2018
08:02:48
жесть.
хорошо, спасибо большое, пойду попилю.

Dmitri
24.06.2018
08:03:12
попили, удачи тебе)
Кстати, я тебе соврал, знаковые 8 бит - это от -128 до 127
Но на день месяца хватит
А ещё можешь с побитовым сдвигом заморочиться

many-faced
24.06.2018
08:06:42

Dmitri
24.06.2018
08:07:43
во, GetFromHistDate будет, наверное, так выглядеть:
func GetFromHistoricalDate(histDate int64) (year int64, month int64, day int64) {
year = histDate / (16 * 256)
histDate = histDate - year
month = histDate / 256
day = histDate % 256
return
}
вот так она должна корректно отрицательные годы отрабатываеть

Google

many-faced
24.06.2018
08:11:36
ммм.. нет, чё-т не то

Alan
24.06.2018
08:15:51
/voteban

Dmitri
24.06.2018
08:25:09
ща попробую починить
вот такая фигня получается:
func ToHD(year, month, day int64) int64 {
return year * 100 * 100 + month * 100 + day
}
func FromHD(hd int64) (year, month, day int64) {
year = hd / (100 * 100)
if hd < 0 {
year--
hd = 10000 + hd % 10000
}
hd = hd % 10000
day = hd % 100
month = hd / 100
return
}

many-faced
24.06.2018
09:04:14
не больно ли много места занимает?
*100*100, вот это всё

The
24.06.2018
09:39:27
а дата у нас data переводится?

many-faced
24.06.2018
09:39:41
всё ждал, когда же кто прикопается )

The
24.06.2018
09:40:19
я долго тренирвоал снобизм. зря что-ли?

many-faced
24.06.2018
09:40:22
вы лучше посмотрите не на дату, а на время - воскресенье 9.50, можно не только буквой ошибиться.

Roman
24.06.2018
09:51:06

Roman
24.06.2018
09:56:27
В исторических датах крайне важно хранить привязку конкретной даты к календарю.
Если только вы уж какой-то совсем простенький справочник не делаете.

Yaroslav
24.06.2018
11:02:54
За первым до нэ сразу шёл первый нэ

many-faced
24.06.2018
11:04:19
?

Yaroslav
24.06.2018
11:05:21
=)

Roman
24.06.2018
11:26:25
Имеет ли смысл заводить goroutine pool для конкурентной обработки болшого колва запросов? (речь идёт не о HTTP) или просто запускать горутины go handle() ?
предполагаю, что в случае HTTP, инициализация обработчика в горутине занимает значительное время и создаёт лишние аллокации и если эдакого overhead'а не имеется просто запускать горутины и не париться?

Google

Pawel
24.06.2018
11:33:01
Зачем усложнять, при чём так зверски? Вы не напишете более эффективный планировщик, чем тот, что есть. Голанг имеено под это заточен изначально

Roman
24.06.2018
11:34:52
если обработчик при инициализации аллокейтит память, то это будет значительно тормозить при постоянном запуске многого колва обработчиков

Pawel
24.06.2018
11:36:34
В таком случае без исходников и метрик вам ни кто ничего вразумительного не скажет
Сомневаю я что скедулер так вот прям алокейтит много памяти чтобы это можно было пробороть без костылей и просадок по потреблению процессора. Ну и вряд ли там вообще возможна какая-то значимая оптимизация без перехода в хардкорный режим ядра

Roman
24.06.2018
11:41:02
В таком случае без исходников и метрик вам ни кто ничего вразумительного не скажет
да исходники то открыты: https://github.com/qbeon/webwire-go/blob/master/serverHttp.go#L66
сейчас работаю над реализацией feature request issue по параллелизации обработки запросов и задумался, а не стоит ли мне в этом случае использовать goroutine pool..
короче скорее всего нужно замерить сколько памяти например тот-же parser выделяет

Dmitry
24.06.2018
11:45:09
че хероку от меня хочет?
https://pastebin.com/6jJwBT7m

Anton
24.06.2018
11:47:43
исходников нет, но подозреваю, что импорта нет для xrich

Pawel
24.06.2018
11:47:56
Запускается одна горутина статически, в ней крутится евентлуп в цикле, который принимает сообщения, содержащие таски на вычисление. Вычисляет, передаёт результат в колбэк

Dmitry
24.06.2018
11:49:21

Pawel
24.06.2018
11:50:49

Dmitry
24.06.2018
11:51:11

Pawel
24.06.2018
11:51:42
че это я злой, я по делу вам говорю

Dmitry
24.06.2018
11:52:43
да есть у меня импорты
и локально работает
я этой хероке не могу указать где мой пакет по видимому находится. а сам он не может определить

Pawel
24.06.2018
11:53:41
значит пакета нет в папке вендор

Google

Roman
24.06.2018
11:53:45

Dmitry
24.06.2018
11:54:19

Pawel
24.06.2018
11:54:22

Roman
24.06.2018
11:55:41
мы не в Node.js чтоб однопотоком баловаться

Vasily Romanov
24.06.2018
11:56:42
например, если придёт 10к запросов, то мы можем породить 10к горутин и обработка этих запросов сожрёт много памяти

Dmitry
24.06.2018
11:57:23

Admin
ERROR: S client not available

Pawel
24.06.2018
11:57:31

Vasily Romanov
24.06.2018
11:57:45
это канал + пачка горутин
которые обрабатывают задачи, приходящие из канала

Pawel
24.06.2018
11:58:52
я первый раз деп использую
ну тут всё просто. все нестандартные пакеты должны быть в вендор что бы вы не использовали в качестве менеджера зависимостей

Vasily Romanov
24.06.2018
11:58:53
горутины воркеры можно добавлять-удалять
первое тупо посредством запуска ещё горутины
2-е через доп канал, куда кладём сообщение о том что горутине надо завершиться

Roman
24.06.2018
11:58:58

Vasily Romanov
24.06.2018
11:59:09
именно
в этом случае мы эти 10к задач прожуём медленнее, но более контролируемо
ну или можем преаллоцировать сколько надо воркеров
у меня например в 1 сервисе 8к преаллоцированно, с лимитом увеличения до 60к

Google

Pawel
24.06.2018
12:00:42

Roman
24.06.2018
12:00:50
в таком случае workerPool на каждого клиента? или 1 на весь сервер?
думаю что если в контексте клиента пул запускать, то это будет быстрее, ибо, как мне кажется, синхронизация доступа к каналу сожрёт много времени если клиентов предположим 10к и каждый из них по 20 запросов херачит

Vasily Romanov
24.06.2018
12:00:59
за чем вы гонитесь
работать будет всё - и горутина на запрос, и на клиента, и на сервер
вопрос только в том, что у вас реально етсь такая нагрузка и в характере этой нагрузки

Dmitry
24.06.2018
12:01:58

Roman
24.06.2018
12:02:07

Dmitry
24.06.2018
12:02:33
я просто делал godep save ./cmd/.. и оно норм прописывало пути не кладя даже мой пакет в вендор

Vasily Romanov
24.06.2018
12:03:11
mutex profile есть в pprof

Dmitry
24.06.2018
12:03:45
как мне тогда сказать депу чтобы он мой пакет в корне гихаба положил тоже в папку вендор? и зачем мне две копии пакета - в корне и в вендоре?

Vasily Romanov
24.06.2018
12:03:47
в крайнем случае можно шардировать на несколько воркер пулов, но, опять-таки, не факт что даст прирост

Roman
24.06.2018
12:03:59
чего бояться, мерять надо :)
мерять надо безусловно, но вот предполагаю что, теоретически, atomic int должен быть быстрее чем канал, по которому передаются целые сообщения.
ибо канал блокирует во время копирования сообщения и передачи его в горутину а atomic только ин-/декрементит
т.е. можно поставить atomic int currentActiveWorkers и с ним работать в обработчиках соединений
хотя...

Vasily Romanov
24.06.2018
12:06:40
вы заморачиваетесь

Roman
24.06.2018
12:06:53

Pawel
24.06.2018
12:08:11

Dmitry
24.06.2018
12:09:25

Pawel
24.06.2018
12:09:50