
Sergey
05.08.2018
19:11:54
go trace?
пишешь 20 строк кода, запускаешь, смотришь сколько потоков заспаунено
предполагаю, что задача просто откладывается, и после этого либо поллится, либо ожидается ответ от ОС
(но по-прежнему жаль, что эта нформация ничего не даёт)

Никита
05.08.2018
19:14:22

Google

Sergey
05.08.2018
19:14:38
через top

Никита
05.08.2018
19:20:46
В pprof что ли?

Sergey
05.08.2018
19:21:23
не знаю, любыми удобными вам способами

Aleksandr
05.08.2018
19:47:57

Sergey
05.08.2018
19:51:00
пруф есть?
ага, у меня бот падал после неактивности в несколько часов
по логам выяснилось, что приходил пустой апдейт

Aleksandr
05.08.2018
19:52:12
то есть пруфа нет)
вебхук или лонгполл?
хотя не суть. пустой апдейт не описанный в доке - это сказка

Sergey
05.08.2018
19:55:02

Google

Aleksandr
05.08.2018
19:56:41
так что вы уже двоем заблуждаетесь?

Sergey
05.08.2018
19:56:49
в N-ером

Aleksandr
05.08.2018
19:57:09
угу

Лемур
05.08.2018
20:30:46

Sergey
05.08.2018
20:31:20
у меня он падал потому что я не правильно парсил пустой апдейт
изначально мне было лень и я просто панику впаял на else-кейс

Aleksandr
05.08.2018
20:38:46
а пустой апдейт - это сказки

Никита
05.08.2018
20:41:27

Slava
05.08.2018
20:47:36
если по простому - то сискол остаётся на треде, а рантайм го берёт другой тред из пула(или создаёт новый) и перекидывает очередь горутин на новый тред
если по сложному, то не со всеми сисколами всегда так
есть оптимизации разные, чтобы не переключаться между тредами на быстрых сисколах

Roman
05.08.2018
20:51:06

Никита
05.08.2018
20:51:51
Отлично, понял, спасибо
Где об этом можно почитать в деталях?

Roman
05.08.2018
20:52:17

Никита
05.08.2018
20:52:19
Кучу статей перечитал, но все равно они не покрывают многие вопросы
Я вот не понимаю одной, наверняка фундаментальной, вещи
Зачем мы указываем количество логических процессоров? На что это влияет?
Через GOMAXPROCS

Google

Slava
05.08.2018
20:54:06
на количество одновременно выполняющихся горутин

Никита
05.08.2018
20:54:21
А как? ?
Насколько я понял, треды ОС создаются независимо от количества процессоров

Slava
05.08.2018
20:54:41
что как?

Никита
05.08.2018
20:54:48
И горутины исполняются в тредах

Slava
05.08.2018
20:55:09
рантайм го контроллирует что выполняется в тредах, так он и ограничивает

Sergey
05.08.2018
20:55:32

Slava
05.08.2018
20:55:55

Никита
05.08.2018
20:56:32
Но потом прочел другое

Никита
05.08.2018
20:56:49
https://rakyll.org/scheduler/
И там принцип работы обьясняется как то по другому

Sergey
05.08.2018
20:57:21

Никита
05.08.2018
20:57:28
P имеет другой смысл в цепочке G-M-P
Меня совсем запутала эта картинка
И где то говорится что GOMAXPROCS отвечает за количество логических процессоров, где то - за количество тредов ОС
Например, в статье выше
https://dave.cheney.net/tag/gomaxprocs
GOMAXPROCS is the well known (and cargo culted via its runtime.GOMAXPROCS counterpart), value that controls the number of operating system threads allocated to goroutines in your program.

Google

Slava
05.08.2018
21:01:06
ну, так и написано, количество тредов - которые заняты вполнением горутин

Никита
05.08.2018
21:01:22
Да, тредов

Slava
05.08.2018
21:01:30
сколько там реально тредов будет работать - кто его знает

Никита
05.08.2018
21:01:36
В доке по GOMAXPROCS
GOMAXPROCS sets the maximum number of CPUs that can be executing simultaneously and returns the previous setting.

Slava
05.08.2018
21:02:02
что непонятно то в итоге?

Sergey
05.08.2018
21:02:28
у него лок на processors vs threads

Никита
05.08.2018
21:02:30

Admin
ERROR: S client not available

Slava
05.08.2018
21:03:46
это следующее предложение

Никита
05.08.2018
21:04:06
Это все еще касается логических процессоров
Не потоков ОС
Разве нет?

Slava
05.08.2018
21:05:13
нет, в той же документации по го, где про логические cpu
The GOMAXPROCS variable limits the number of operating system threads that can execute user-level Go code simultaneously. There is no limit to the number of threads that can be blocked in system calls on behalf of Go code; those do not count against the GOMAXPROCS limit. This package's GOMAXPROCS function queries and changes the limit.

Никита
05.08.2018
21:06:26
Странно почему конкретно в описании функции говорится чуточку о другом

Slava
05.08.2018
21:06:33
логические cpu тут потому, что программе не всегда дано использовать все физические cpu, к примеру если она работает на определённой numa ноде

Roman
05.08.2018
21:06:50

Slava
05.08.2018
21:06:50

Google

Никита
05.08.2018
21:06:58

Roman
05.08.2018
21:07:10

Sergey
05.08.2018
21:07:19
lmgtfy

Никита
05.08.2018
21:07:32
грубо говоря, одно ядро
Если нет HT
Мне эти два понятия не кажутся одним и тем же ?

Slava
05.08.2018
21:11:20
ну, это скорее ваша проблема, чем языка Go
вы берёте из целого абзаца пол предложения и пытаетесь этим оперировать
так нельзя

Никита
05.08.2018
21:12:09
Окей, берем целое
GOMAXPROCS sets the maximum number of CPUs that can be executing simultaneously and returns the previous setting. If n < 1, it does not change the current setting. The number of logical CPUs on the local machine can be queried with NumCPU. This call will go away when the scheduler improves.
Что поменялось? Где тут говорится про потоки ОС?

Slava
05.08.2018
21:12:58
а зачем говорить об этом тут, если о тредах сказано на несколько абзацев выше в той же документации?

Никита
05.08.2018
21:13:37
Потому что это в документации, нет?

Roman
05.08.2018
21:13:42
Если нет HT
А если у нас ht? А если cpu умеет до 8 потоков на ядро?

Никита
05.08.2018
21:13:59
Почему в документации говорится о двух разных вещах?

Slava
05.08.2018
21:14:23
есть такое понятие, абстракции

Никита
05.08.2018
21:14:52