Cat
го стал эрлангом?
Artem
Вообще формально нет, шедулер решит сам, мб и не продолжит
Roman
вопрос в том, обязательно ли условие одновременности попадания обеих горутин в машины, чтобы все случилось?
Roman
или одна из них может слиться в очередь в этот момент?
Cat
что такое "машина"?
Roman
вопрос к тому, что количество операций с каналами может влиять на горутины когда их очень много, операции с каналами будут ждать счастья, пока обе горутины попадут в машины, таким образом, они становятся косвенно связанными
Roman
что такое "машина"?
та хрень, которая исполняет горутину
Daniel
и что же это за "хрень"?
Roman
ну процесс оси, это не принципиально
Daniel
процесс оси?
Roman
я пытаюсь понять, шедулер пбудет их подгадывать вместе на две машины, или по отдельности
Roman
процесс оси?
это структура M в рантайме
Cat
скедулер?
Cat
он один на программу
Daniel
шедулер вообще позвовет заблокировавшуюся на канале горутину только после того, как ее можно будет разблокировать
Roman
шедулер вообще позвовет заблокировавшуюся на канале горутину только после того, как ее можно будет разблокировать
вот и вопрос, это когда? когда вторая исполняется в тот же момент на другой машине, или не обязательно?
Daniel
никакого того же момента нет, на самом деле
Daniel
но - да, первая блокируется, приходит вторая, происходит передача данных, разблокируются обе
Roman
вообще то есть, если есть две машины
Daniel
опять машины
Cat
(кто-нибудь понимает, про какие машины речь?)
Daniel
если у нас два ядра - у нас могет и правда две горутины исполняться одновременно
Daniel
но на одном канале - нет, там для того мутексы сделаны
Daniel
сначала одна, потом вторая
Roman
допустим первая горутина попала в машину M1 и дошла до чтения из канала и вернулась обоатно в очередь процесса P1.
Roman
т.е. заблокировалась
Roman
в какой момент она вернется в машину, если вторая горутина попала в машину M2 и дошла до записи в канал
Roman
заблокировалась и легла в очередь
Cat
подскажи, из какой литературы эти термины машины и процесса?
Roman
из рантайма
Daniel
ма-ма
Daniel
нет там никакой машины
Petr
https://blog.nindalf.com/posts/how-goroutines-work/
Cat
из рантайма
гошного рантайма?
Daniel
есть шедулер, который перегружает регистры процессора, когда хочет и может
Petr
Мне кажется это через день тут разжовывают )
Daniel
ну - часто, да
Cat
я понял
Cat
это из runitme/proc.go
Cat
➜ /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
> | rg > го чат Тонко.
Roman
Горутины: всё, что вы хотели знать, но боялись спросить / Хабр https://m.habr.com/post/141853/
Roman
модет я один читаю хабр go?
Cat
короче
Cat
тебя обманули, никто не использует термин "Машина"
Daniel
// 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.
Cat
тебя обманули, никто не использует термин "Машина"
это типичные потоки, они же треды (они же системные потоки)
Daniel
и машинами их не называет вообще никто
Roman
вот теперь давайте вернемся к вопросу
Roman
как происходит разлочка канала
Daniel
а какая разница?
Daniel
то есть - почитайте исходники, если это почему-то важно
Cat
переделанный вопрос внимание! вопрос знатокам. если одна горутина успешно прочитала из канала и продолжила выполнение на потоке 1, означает ли это, что горутина-отправитель тоже продолжает исполняться на потоке 2, т.е. не находится в очереди Px (хз что это) ? Канал небуферизован.
Daniel
означает
Cat
, если не стоит GOMAXPROCS=1
Cat
если стоит, то она будет работать до того момента, пока не произойдёт переключение контекста
Cat
переключение можежт произойти в ряде случаев, которые есть в спеке
Cat
только "машина" заменена на "поток"
Daniel
при том, как устроен в go шедулер - они стоят там все :)
Daniel
потому что те, которые не стоят - исполняются
Cat
горутины раскидываются по потокам (магическим образом), поэтому одновременно (прям одновременно) может исполнятся столько рутин, сколько у тебя возможных потоком на пеке
Vladislav
Ну там же много очередей.
Vladislav
И может шедулер предпочесть уже загруженный контекст, вместо переключения на новый?
Daniel
тут надо бы понимать, что такое "исполняется"
Roman
и еще тот же вопрос но для неблокированных операций через select default
Daniel
И может шедулер предпочесть уже загруженный контекст, вместо переключения на новый?
у шедулера имеется там очередь событий, и управление горутины получат в порядке определяемом событиями
Cat
select это же просто спин лок с рандомным выбором действия
Daniel
тут надо бы понимать, что такое "исполняется"
так вот - горутина, заблокировавшаяся на сисколе (вместе с тредом) - она исполняется с точки зрения шедулера.
Cat
(по-моему вызывает)
Roman
а какая разница?
есть как минимум два последствия: 1. нужно, чтобы очередь горутин на P1 совпала с P2 по позиции этих двух горутин, чтобы их одновременно посадить на машины, 2. таким образом можно обеспечить гарантированное рараллельное исполнение кода
Daniel
а как это может произойти? тред-то заблочен. можно снять с него горутину, но зачем?