
Alexey
21.03.2017
20:23:55

FlaIDzeres
21.03.2017
20:25:23
Вопрос по многопоточности, что то на офсайте как то без конкретики. Горутины подкапотом через какой то внутренний пул работают? Или как то по другому ?

Maxim
21.03.2017
20:28:45
ПРИКРОЙТЕ ВОРОТА, НОВЫЕ ЗАРАЖЁННЫЕ ВЫСТУПАЮТ

Alex Фэils?︙
21.03.2017
20:29:29
"Запри эту чертову дверь!"

Google

Alexander
21.03.2017
20:29:30

corpix
21.03.2017
20:29:34

Alexey
21.03.2017
20:30:08
Там надо долистать до слайда с горутинами только. Сначала про другое идёт.

FlaIDzeres
21.03.2017
20:31:38

Alexander
21.03.2017
20:31:39
хех

corpix
21.03.2017
20:32:24

FlaIDzeres
21.03.2017
20:33:14

Maxim
21.03.2017
20:33:40

Alexey
21.03.2017
20:34:17

Alexander
21.03.2017
20:35:01
@flaidzeres https://docs.google.com/document/d/1TTj4T2JO42uD5ID9e89oa0sLKhJYD0Y_kqxDv3I3XMw лови

FlaIDzeres
21.03.2017
20:35:48
Благодарю
Хотя 2012, актуально ли

Google

FlaIDzeres
21.03.2017
20:36:36
Как ни как 2к17

Alexander
21.03.2017
20:36:57
ну по крайней мере это был драфт ) вроде как сейчас оно в языке
ну посмотри что меняли с 1.2 )
?

FlaIDzeres
21.03.2017
20:38:20
Проще тогда в исходниках посмотреть)
Но я вообще рассчитывал на быстрый ответ
Видимо знающих пока нет, или они спят

Roman
21.03.2017
20:40:02
Всем привет! Какую gui либу выбрать что бы потом не было мучительно больно?
(я знаю что многие не любят го на десктопе и иногда ругаются на это)

Alexander
21.03.2017
20:43:00
@flaidzeres особо не заморачивался просто

FlaIDzeres
21.03.2017
20:43:27

Maxim
21.03.2017
20:43:58

Alexander
21.03.2017
20:44:23

Roman
21.03.2017
20:44:46
а shiny сильно сырая?

Maxim
21.03.2017
20:44:50
Вроде есть форк официальной, но умершей библы для гуя, но я хз
Так-то мне бы тоже не помешало, но всё что я щупал - работает. Но писать это всё - немного ректально

Alexander
21.03.2017
20:46:32
а shiny сильно сырая?
хз не пробовал
https://github.com/avelino/awesome-go#gui тут список есть ) qt, gtk пробовал

Maxim
21.03.2017
20:51:51

Alexander
21.03.2017
20:52:34
что-то работал ) окно сделал и забил )
*что-что

Google

Maxim
21.03.2017
20:53:14
*что-что
Тут полгода как редактирование есть, бро. :В


Vladimir
21.03.2017
20:53:32
Но я вообще рассчитывал на быстрый ответ
Если быстро:
Есть GOMAXPROC (число ядер по дефолту в новых версиях Go) worker тредов которые исполняют горутины. При вызове функции воркер тред может перехватить управление на себя, припарковать горутину, и начать выполнять следующую.
Есть отдельно netpoller тред, который занимается горутинами, которые делают асинхронный io syscall (ходят в сеть, грубо говоря), и скидывает их в очередь исполнения, когда их асинхронный вызов завершается. Еще есть timer тред, который держит priority queue таймеров и будит горутины, когда приходит их время.
Еще горутины делающие блокирующие системные вызовы или вызывают CGo сбрасываются в отдельные треды, т.к. нет гарантий что они не заблокируются, а если это произойдет в worker треде, то её будет ждать очередь в этом worker, что плохо. Собственно из за скидывания в отдельный поток у CGo большой overhead.
Можно почитать https://morsmachine.dk/go-scheduler
Поправьте, если я где-то не прав.


Alexander
21.03.2017
20:54:13
месяца 2 назад у меня не работает по крайней мере
Если быстро:
Есть GOMAXPROC (число ядер по дефолту в новых версиях Go) worker тредов которые исполняют горутины. При вызове функции воркер тред может перехватить управление на себя, припарковать горутину, и начать выполнять следующую.
Есть отдельно netpoller тред, который занимается горутинами, которые делают асинхронный io syscall (ходят в сеть, грубо говоря), и скидывает их в очередь исполнения, когда их асинхронный вызов завершается. Еще есть timer тред, который держит priority queue таймеров и будит горутины, когда приходит их время.
Еще горутины делающие блокирующие системные вызовы или вызывают CGo сбрасываются в отдельные треды, т.к. нет гарантий что они не заблокируются, а если это произойдет в worker треде, то её будет ждать очередь в этом worker, что плохо. Собственно из за скидывания в отдельный поток у CGo большой overhead.
Можно почитать https://morsmachine.dk/go-scheduler
Поправьте, если я где-то не прав.
тоже самое что и сбрасывал я до этого )


Daniel
21.03.2017
20:55:51
о чем вы тут опять?


FlaIDzeres
21.03.2017
20:56:01
Если быстро:
Есть GOMAXPROC (число ядер по дефолту в новых версиях Go) worker тредов которые исполняют горутины. При вызове функции воркер тред может перехватить управление на себя, припарковать горутину, и начать выполнять следующую.
Есть отдельно netpoller тред, который занимается горутинами, которые делают асинхронный io syscall (ходят в сеть, грубо говоря), и скидывает их в очередь исполнения, когда их асинхронный вызов завершается. Еще есть timer тред, который держит priority queue таймеров и будит горутины, когда приходит их время.
Еще горутины делающие блокирующие системные вызовы или вызывают CGo сбрасываются в отдельные треды, т.к. нет гарантий что они не заблокируются, а если это произойдет в worker треде, то её будет ждать очередь в этом worker, что плохо. Собственно из за скидывания в отдельный поток у CGo большой overhead.
Можно почитать https://morsmachine.dk/go-scheduler
Поправьте, если я где-то не прав.
Спасибо за развернутый ответ, я правильно понимаю что пулы статичны? До есть динамического расширения системных потоков нет?


Daniel
21.03.2017
20:57:22
нет, потому, что не нужно

Vladimir
21.03.2017
20:58:04

FlaIDzeres
21.03.2017
21:04:39

Roman
21.03.2017
21:05:53
gx-ui, go-qml
go-ui - не нашел доков совсем, go-qml в альфе похоже
у qt какие подводные? оно кросикомпиляцию сильно ломает?
которая https://github.com/therecipe/qt

Alexander
21.03.2017
21:07:34
из названия видно
кроскомпиляцию не пробовал ) по идее с qt проблем не должно быть )
с нативным гуём всё странно ) биндинги вроде есть к многим либкам )

Roman
21.03.2017
21:23:55
что то experemental пугвет
возьму qt наверное
спасибо!

Maxim
21.03.2017
21:30:36

Oleksandr
21.03.2017
22:16:18

Google

Daniel
21.03.2017
22:16:54
Потому, что у нас есть горутины
Их может быть существенно больше, чем ядер и тредов

Oleksandr
21.03.2017
22:18:04
на сколько тредов оси мапятся горутины?
если это GOMAXPROC, то их как-то мало

Phil
21.03.2017
22:26:49
Почему мало?

Oleksandr
21.03.2017
22:31:14
при блокирующих операциях быстро забьются
ось их вытеснит

Admin
ERROR: S client not available

Phil
21.03.2017
22:32:20

Oleksandr
21.03.2017
22:33:27

Phil
21.03.2017
22:33:51

Oleksandr
21.03.2017
22:34:37
или если не написали :)

Phil
21.03.2017
22:35:15

Oleksandr
21.03.2017
22:36:33

Phil
21.03.2017
22:37:06
Не, можно for { i=1 } сделать и всё

Oleksandr
21.03.2017
22:38:09

Phil
21.03.2017
22:38:41

Google

Daniel
21.03.2017
22:38:45
Сетевой обмен в недрах рантайма асинхронный

Oleksandr
21.03.2017
22:38:46

Phil
21.03.2017
22:39:31

Daniel
21.03.2017
22:39:32
Этого достаточно для того, чтобы любой обмен с базой перестал быть блокирующим

Phil
21.03.2017
22:41:29
Нет. Беру свои слова обратно - не могу

Alexey
21.03.2017
22:42:42
В Go вообще нет возможности синхронно сеть писать?
Всё, на свалку:)

Daniel
21.03.2017
22:43:05
А?

Oleksandr
21.03.2017
22:47:50
не, не клеится
чтение файла с диска может быть 100% синхронным

Daniel
21.03.2017
22:50:21
Зачем?

Oleksandr
21.03.2017
22:51:20
ну вот просто, иначе нельзя

Daniel
21.03.2017
22:51:28
Это как?

Oleksandr
21.03.2017
22:52:22
это по одному треду оси на сисколл

Daniel
21.03.2017
22:52:22
Еще раз - io асинхронное в недрах go

Oleksandr
21.03.2017
22:52:42
поверю, что сетевое

Daniel
21.03.2017
22:52:54
И файловое

Oleksandr
21.03.2017
22:55:04
https://github.com/golang/go/issues/6817
ну не так это