
Petr
22.05.2018
18:28:53
Мне кажется это через день тут разжовывают )

Daniel
22.05.2018
18:29:12
ну - часто, да

Sergey
22.05.2018
18:29:48
я понял
это из runitme/proc.go

Google

Sergey
22.05.2018
18:31:10
➜ /usr/local/go/src/runtime cat proc.go |rg machine
// M - worker thread, or machine.
// P - processor, a resource that is required to execute Go code.
// M must have an associated P to execute Go code, however it can be
// blocked or in a syscall w/o an associated P.

Nik
22.05.2018
18:31:57
> | rg
> го чат
Тонко.

tsov
22.05.2018
18:33:04
Горутины: всё, что вы хотели знать, но боялись спросить / Хабр
https://m.habr.com/post/141853/
модет я один читаю хабр go?

Sergey
22.05.2018
18:34:10

tsov
22.05.2018
18:34:17

Sergey
22.05.2018
18:34:32
короче
тебя обманули, никто не использует термин "Машина"

Daniel
22.05.2018
18:35:40
// The main concepts are:
// G - goroutine.
// M - worker thread, or machine.
// P - processor, a resource that is required to execute Go code.
// M must have an associated P to execute Go code, however it can be
// blocked or in a syscall w/o an associated P.

Sergey
22.05.2018
18:35:55

Daniel
22.05.2018
18:36:22
и машинами их не называет вообще никто

tsov
22.05.2018
18:36:24
вот теперь давайте вернемся к вопросу
как происходит разлочка канала

Google

Daniel
22.05.2018
18:36:54
а какая разница?
то есть - почитайте исходники, если это почему-то важно

Sergey
22.05.2018
18:37:19
переделанный вопрос
внимание! вопрос знатокам. если одна горутина успешно прочитала из канала и продолжила выполнение на потоке 1, означает ли это, что горутина-отправитель тоже продолжает исполняться на потоке 2, т.е. не находится в очереди Px (хз что это) ? Канал небуферизован.

Daniel
22.05.2018
18:37:56
означает

Sergey
22.05.2018
18:38:27
, если не стоит GOMAXPROCS=1
если стоит, то она будет работать до того момента, пока не произойдёт переключение контекста

tsov
22.05.2018
18:39:17

Sergey
22.05.2018
18:39:18
переключение можежт произойти в ряде случаев, которые есть в спеке
только "машина" заменена на "поток"

Vladislav
22.05.2018
18:40:43

Daniel
22.05.2018
18:41:27
при том, как устроен в go шедулер - они стоят там все :)
потому что те, которые не стоят - исполняются

Sergey
22.05.2018
18:42:02
горутины раскидываются по потокам (магическим образом), поэтому одновременно (прям одновременно) может исполнятся столько рутин, сколько у тебя возможных потоком на пеке

Vladislav
22.05.2018
18:42:10
Ну там же много очередей.
И может шедулер предпочесть уже загруженный контекст, вместо переключения на новый?

Daniel
22.05.2018
18:42:40
тут надо бы понимать, что такое "исполняется"

Sergey
22.05.2018
18:43:10

tsov
22.05.2018
18:43:35
и еще тот же вопрос но для неблокированных операций через select default

Daniel
22.05.2018
18:43:39

Google

Sergey
22.05.2018
18:44:22
select это же просто спин лок с рандомным выбором действия

Daniel
22.05.2018
18:44:30

Vladislav
22.05.2018
18:47:30

Sergey
22.05.2018
18:49:41
(по-моему вызывает)

tsov
22.05.2018
18:50:44
а какая разница?
есть как минимум два последствия: 1. нужно, чтобы очередь горутин на P1 совпала с P2 по позиции этих двух горутин, чтобы их одновременно посадить на машины, 2. таким образом можно обеспечить гарантированное рараллельное исполнение кода

Daniel
22.05.2018
18:50:47
а как это может произойти? тред-то заблочен. можно снять с него горутину, но зачем?

tsov
22.05.2018
18:52:29
теооия
потому и спросил

Daniel
22.05.2018
18:52:47
тогда не надо этим заниматься
смысла 0

Sergey
22.05.2018
18:53:05

Sergey
22.05.2018
18:53:26
а если добавим в неё fmt.Println (т.е. сискол), то скедулер переключится на вторую

Daniel
22.05.2018
18:54:12

Sergey
22.05.2018
18:54:24
с GOMAXPROCS=1?

Daniel
22.05.2018
18:54:27
ага

tsov
22.05.2018
18:54:31
еще это иеет значение такое: стоит ли делать сильносвязанные горутины небуферизированными каналами, и если да, то до какого предела и какие последствия будут для остальных горутин, если мы имеем например всего 4 ядра (для примера)

Sergey
22.05.2018
18:54:37

Daniel
22.05.2018
18:54:44
ага
колом программе встать никто не позволит

Google

Sergey
22.05.2018
18:55:13
подожди
так речь не про это, а про контекст свитч как таковой

Vladislav
22.05.2018
18:55:35
https://morsmachine.dk/go-scheduler
Судя по этой штуке шедулер может отдельный поток под сискол поднять.

Sergey
22.05.2018
18:56:11
да он просто системе отдаст и всё, не?
UPD: не.
> The syscalling thread will hold on to the goroutine that made the syscall since it's technically still executing, albeit blocked in the OS.
в общем, обожаю горутины

Admin
ERROR: S client not available

tsov
22.05.2018
19:06:07

Slava
22.05.2018
19:06:31
Не всегда

tsov
22.05.2018
19:06:39
там даже для cgo что то такое есть
я по диагонали смотрел, могу ошибиться

Slava
22.05.2018
19:08:36
Если на каждый маленький сискол переключаться, можно и не успеть всё сделать

tsov
22.05.2018
19:10:45
смысла 0
еще вот сценарий зависона может быть: связываем две горутины небуф. каналом, одна пишет, вторая читает, далее обе делают что то без возможности скинуть в очередь, например, что то считают. тогда если у нас gomaxprocs=2, два ядра, и две машины, то эти обе горутины будут исполняться одновременно, олна на M1, вторая на M2, и все залочится. это реально?

Slava
22.05.2018
19:11:49
Как это
Одновременно и с каналом работать и считать?

tsov
22.05.2018
19:12:21
это если теория верна
что две горутины - читающая и пишущая, для успешного продолдения рабоиы обязаны одновременно быть на двух разных машинах

Vladislav
22.05.2018
19:14:22

Google

Slava
22.05.2018
19:14:56
Нельзя же одновременно в канал писать/читать и считать
В рамках одной горутины
Не относится к вопросу, но в го одна горутина может писать напрямую в стек другой, если та ждет на чтении из канала
Кажется это единственное место такое


Alexander
22.05.2018
19:33:56
Недавно начал писать на го!
Написал своеобразное апи для одного сервиса.
Сейчас хочу написать апи для одного сайта (только апи, фронтенд будет на js'е)
Хочется подойти более-менее основательно, поэтому хотел бы попросить совета какие инструменты лучше использовать, чтобы минимизировать написание кода для всяких шаблонных вещей типа структур таблиц в БД, структур для json'а и прочих вещей.
Пока идеологически планируется примерно следующая архитектура - есть точка входа (возможно несколько, но пока будет использоваться одна). В зависимости от переданных данных запрос перенаправляется в один из модулей через gRPC (тут тоже хотелось бы какую-то подсказку, примеры по использованию, желательно в рамках какой-нибудь IDE - я использую goland от jetbrains).
В большинстве своём интересуют вопросы связанные с приспособлениями для работы с gRPC, генерации структур по таблицам БД и json, и возможно по работе с easyjson (пытался сгенерить с помощью него структуры, но тоже как-то неудачно, а говорят производительности он неплохо прибавляет по сравнению со встроенным)


Slava
22.05.2018
19:36:26
Keep it simple
Начинай с простых вещей, со стандартной библиотеки
Пусть даже код будет более talkative
Всё равно перепишешь ещё раз пять

Alexander
22.05.2018
19:41:17
ну я написал достаточно большое апи, порядка 4-5 тысяч строк
и именно базовые вещи, да и +- как работает всё понятно
интересно именно разобраться как
1)правильно писать такие апи (слышал что можно описывать апи в некотором формате, а на его основе будет генериться серверная часть и допустим клиентская)
2)как работать с grpc (хотелось бы какие-то практические примеры использования в ide)
3)со структурами понятно -просто уменьшение времени написания шаблонного кода
4)ну easyjson вишенка на торте, но етсь подозрения, что ключик к нему там же где и к grpc

Slava
22.05.2018
19:43:34
Если у вас grpc, то вы апи описываете в протобафе
Это мало связано с ide

МАТЬ
22.05.2018
22:25:36
Привет ребята , кто может автобота создать в телеге ?

meehalkoff✪
22.05.2018
22:26:06

МАТЬ
22.05.2018
22:26:51

meehalkoff✪
22.05.2018
22:27:16

Антон
22.05.2018
22:27:38
Я б за такое бан дал

meehalkoff✪
22.05.2018
22:28:05

Ross
22.05.2018
22:28:21