@gogolang

Страница 1093 из 1630
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
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

если стоит, то она будет работать до того момента, пока не произойдёт переключение контекста

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

только "машина" заменена на "поток"

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
тут надо бы понимать, что такое "исполняется"
так вот - горутина, заблокировавшаяся на сисколе (вместе с тредом) - она исполняется с точки зрения шедулера.

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

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

tsov
22.05.2018
18:52:29
теооия

потому и спросил

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

смысла 0

Sergey
22.05.2018
18:53:05
а как это может произойти? тред-то заблочен. можно снять с него горутину, но зачем?
ну например, если мы сделаем 2 рутины, крутящиеся в цикле, и поставим GOMAXPROCS=1, то будет выполняться только одна

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
так вот - горутина, заблокировавшаяся на сисколе (вместе с тредом) - она исполняется с точки зрения шедулера.
перед вызовом сисколов есть какой то код, который горутину кладет в очередь к P и снимант ее с M, разве нет?

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
это если теория верна

что две горутины - читающая и пишущая, для успешного продолдения рабоиы обязаны одновременно быть на двух разных машинах

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
Привет ребята , кто может автобота создать в телеге ?

МАТЬ
22.05.2018
22:26:51
мегатрон?)
В телеге который продаёт

meehalkoff✪
22.05.2018
22:27:16
В телеге который продаёт
бюджет 100 рублей?)

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

meehalkoff✪
22.05.2018
22:28:05
Я б за такое бан дал
надеюсь не мне)

Ross
22.05.2018
22:28:21
надеюсь не мне)
И тебе за компанию

Страница 1093 из 1630