
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
Фьютекс представляет собой выровненное целое в общей памяти (для нескольких процессоров) в пользовательском пространстве и очередь ожидания в пространстве ядра
А ядро - это сисколл.

Roman
10.03.2017
10:36:31
https://golang.org/src/sync/mutex.go?m=text

Google

Alexey
10.03.2017
10:36:53

Roman
10.03.2017
10:37:22

Alexey
10.03.2017
10:37:45

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

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

Kirill
10.03.2017
10:38:56

Roman
10.03.2017
10:40:09

Антон
10.03.2017
10:40:25

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

Google

Alexey
10.03.2017
10:40:58

Kirill
10.03.2017
10:41:05

Roman
10.03.2017
10:43:21

/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

Roman
10.03.2017
11:56:27

ainu
10.03.2017
11:57:13

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

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

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