@proGO

Страница 531 из 1674
Roman
10.03.2017
10:23:24
Alexey
10.03.2017
10:32:34
Зачем для этого сисколл?
https://ru.wikipedia.org/wiki/%D0%A4%D1%8C%D1%8E%D1%82%D0%B5%D0%BA%D1%81 Фьютекс представляет собой выровненное целое в общей памяти (для нескольких процессоров) в пользовательском пространстве и очередь ожидания в пространстве ядра А ядро - это сисколл.

Google
Alexey
10.03.2017
10:36:53
ну я смотрю на perf trace и не вижу никаких futex
Вот тут же есть: https://gist.github.com/scukonick/8257bc5f5717bf4d95c01168cb2cb872

Roman
10.03.2017
10:37:22
Roman
10.03.2017
10:37:46
package main import "sync" func main() { var mtx = &sync.Mutex{} for { mtx.Lock() mtx.Unlock() } }

я вот взял такой код

зачем каналы, если нас интересует мьютекс?

Alexey
10.03.2017
10:38:32
https://golang.org/src/sync/mutex.go?m=text
atomic.CompareAndSwapInt32 - вот оно должно в ядро стучать

Roman
10.03.2017
10:38:43
нет там сисколлов, только select

Kirill
10.03.2017
10:38:56
Лимиты на тельце все равно те же.
лимиты на тельце мультипарт не те же, он на диск сбрасывает, если тельце большое, о чем сам valyala говорил.

Roman
10.03.2017
10:40:09
atomic.CompareAndSwapInt32 - вот оно должно в ядро стучать
причём, там [pid 13296] select(0, NULL, NULL, NULL, {0, 10000}) = 0 (Timeout)

Антон
10.03.2017
10:40:25
зачем каналы, если нас интересует мьютекс?
в каналах немного другая реализация мьютекса видимо https://golang.org/src/runtime/chan.go#49

Roman
10.03.2017
10:40:33
т.е. оно поллит только stdin

Google
Alexey
10.03.2017
10:40:58
зачем каналы, если нас интересует мьютекс?
Мои изначальный пост был и про каналы, и про мьютексы)

/dev/null
10.03.2017
10:48:00
Кто пробовал совместную разработку на Атоме?

Subbotin
10.03.2017
11:02:05
Это всё твой многогорутинный строкопроцессор? Тогда надо больше работы на каждую горутину вешать, в смысле от получения из канала до отправки в следующий.
лол. перенес функции самой пишущей/читающей горутины в другую. существенно сократил запись и чтение из каналов.

скорость упала

flat flat% sum% cum cum% 141.10s 58.63% 58.63% 141.13s 58.64% syscall.Syscall 41.51s 17.25% 75.88% 41.51s 17.25% runtime.mach_semaphore_wait 29.27s 12.16% 88.04% 29.27s 12.16% runtime.usleep 19.18s 7.97% 96.01% 19.18s 7.97% runtime.mach_semaphore_signal 3.81s 1.58% 97.59% 3.81s 1.58% runtime.memmove 2.22s 0.92% 98.51% 2.22s 0.92% runtime.indexbytebody 0.16s 0.066% 98.58% 1.29s 0.54% runtime.mallocgc 0.12s 0.05% 98.63% 70.83s 29.43% runtime.findrunnable 0.06s 0.025% 98.65% 28.79s 11.96% runtime.runqgrab 0.04s 0.017% 98.67% 81.93s 34.04% runtime.schedule

Alexey
10.03.2017
11:03:02
нет там сисколлов, только select
Во! package main import "sync" func a(mutex *sync.Mutex) { for { mutex.Lock() mutex.Unlock() } } func main() { var mtx = &sync.Mutex{} go a(mtx) go a(mtx) go a(mtx) a(mtx) } Когда уходит на разные ядра (или, скорее, треды), то идут сисколлы.

если канал в одной горутине, то тоже сисколлов не будет: func main() { ch := make(chan bool, 1) for { ch <- true <- ch } }

Subbotin
10.03.2017
11:15:46
хм. засунул в GOMAXPROCS=1 - ускорилось

Alexey
10.03.2017
11:29:41
хм. засунул в GOMAXPROCS=1 - ускорилось
А запусти htop, пока у тебя процесс бежит. Увидишь, наверняка, что там уходит много времени в system, а не в user. Это всё из-за сисколлов. Когда ты ставишь GOMAXPROCS=1, у тебя остаётся только один тред. И в нём, как мы тут выше выяснили, сисколлы не используются. Все блокировки в userspace происходят.

Subbotin
10.03.2017
11:30:10
угу. сис раньше жрало 1/3 грубо говоря

даже больше

счас сиса почти нет

вот тебе и "плодите каналы"

Alexey
10.03.2017
11:32:55
У тебя, наверно, просто операций между забором из канала и отправкой в следующий канал мало, а переливаний из канала в канал много. Вот он и дёргается туда сюда.

Subbotin
10.03.2017
11:34:54
угу.

ну да ладно.

на будущее буду знать

Sergey
10.03.2017
11:35:13
Хм

Google
ainu
10.03.2017
11:54:55
вот тебе и "плодите каналы"
По идее от задачи зависит. Чаще всего "плодите каналы" пока дает прирост.

Особенно если там чтото тяжелое. Картинки например генерируются

Alexey
10.03.2017
11:55:45
По идее от задачи зависит. Чаще всего "плодите каналы" пока дает прирост.
Даёт, когда надо распараллелить задачу на разные ядра. Или когда IO. Или в читабельности даёт прирост.

Roman
10.03.2017
11:56:27
Нет не оставалю. Вы блять мою страну превращаете в срань какую-то. Имейте смелость признаваться, что гандоны. Не смогли РКН в хуй послать - придётся меня
Астанавись, Фил !!! Иначе в 60 лет, ты будешь брызгая слюной кричать на продавца в магазине за то что 1 января кусок колбасы очередной раз подорожал.

ainu
10.03.2017
11:57:13
Кто пробовал совместную разработку на Атоме?
А ему разве не нужен акк платный на firepad? Или есть какойто новый модный плагин?

Kanybek
10.03.2017
13:40:18
Приветствую товарищи, может кто нибудь сталкивался следующей задачей. Есть сервер, в котором есть сущности Customer и Supplier, также API на Create/Update этих сущностей. (Их может быть 10 000 записей на базе) И есть например 3 клиента Android, каждый из них может либо создать либо обновить (тоесть create/update) по api эти сущности. Проблема в том что, когда Android клиент online, должен получить все обновления, которые были на сервере, и вот как это сделать? Android клиент дублирует у себя всю базу сервера(Customer, Supplier)

Dmitry
10.03.2017
13:40:47
версию храни справочника например

и при выходе онлайн запрашивай :)

при каждому insert/update инкрементируй версию хоть тригером хоть чем попало

если версия изменилась - мерж.

либо lastUpdate какое-нибудь поле, и у себя курсор в андроиде

после каждого онлайна where lastUpdate > $cursor

Dmitry
10.03.2017
13:41:55
обновил. закомитил новую дату в локальное хранилище.

Kanybek
10.03.2017
13:43:41
"если версия изменилась - мерж." всю базу merge?

Dmitry
10.03.2017
13:44:03
ну это в лоб решение.

10к записей какбе ни о чем на самом деле в масштабе мировой революции

/dev/null
10.03.2017
13:45:32
я вот кстати чем дальше тем больше понимаю что я хочу свой дом... извиняюсь за офтоп

Dmitry
10.03.2017
13:45:39
? внезапно

перфорируют?

Михалыч
10.03.2017
18:04:26
Йоу!

Google
Михалыч
10.03.2017
18:04:31
Привет всем

Врываюсь конечно же с вопросом

Я ща исследую технологии и мне надо выбрать платформу и библиотеки для нового проекта

Sergey
10.03.2017
18:06:47
ну

Михалыч
10.03.2017
18:06:47
Нужно будет сделать сервер к которому будет обращаться клиент из браузера или нет по http

Sergey
10.03.2017
18:07:04
buffalo martini gin

beego

Михалыч
10.03.2017
18:07:13
Надо ли для этой задачи брать фреймворк

Admin
ERROR: S client not available

Михалыч
10.03.2017
18:07:18
И если да то какой

Биго китайский

Sergey
10.03.2017
18:07:34
Надо ли для этой задачи брать фреймворк
если сессии не нужны то можно стандартный

Михалыч
10.03.2017
18:07:39
Кто-нибудь работал с ним? Всё хорошо?

Сессии нужны

Аутентификация

Sergey
10.03.2017
18:08:21
ну мартини не оч

потому что там что то не то с архитектурой

разраб признался

Михалыч
10.03.2017
18:09:03
Лооол

Google
Михалыч
10.03.2017
18:11:04
а вот это

https://gin-gonic.github.io/gin/

типа реинжениринг мартини

кто-нить пробовал?

Mikalai
10.03.2017
18:11:28
я это юзаю

Sergey
10.03.2017
18:11:35
хороший

Михалыч
10.03.2017
18:11:36
и как?

Mikalai
10.03.2017
18:12:06
ну удобнее, чем голый net/http :)

Михалыч
10.03.2017
18:12:35
я прост хочу реквесты обрабатывать и всё))

и не заморачиваться там с многопоточностью итд

и в базу ходить хочу попроще))

Mikalai
10.03.2017
18:13:10
ну тут и не надо заморачиваться

я в базу хожу через gorm

Quet
10.03.2017
18:13:35
Sergey
10.03.2017
18:14:59
монга небось

или постгресс

corpix
10.03.2017
18:17:17
я прост хочу реквесты обрабатывать и всё))
Советую обратить внимание на https://github.com/avelino/awesome-go

Vadim
10.03.2017
18:33:49
Вопрос про нужность го хороший, мы так и не знаем, что планирует делать приложенька, вся же вебня по сути обрабатывает реквесты

Михалыч
10.03.2017
18:34:04
Спасибо

Страница 531 из 1674