@gogolang

Страница 1279 из 1630
Sergey
05.08.2018
19:11:54
go trace?
пишешь 20 строк кода, запускаешь, смотришь сколько потоков заспаунено

предполагаю, что задача просто откладывается, и после этого либо поллится, либо ожидается ответ от ОС

(но по-прежнему жаль, что эта нформация ничего не даёт)

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

Никита
05.08.2018
19:20:46
через top
Не понял

В 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
у меня он падал потому что я не правильно парсил пустой апдейт
слушай, тут через люди спрашивают почему падает на чтении update.Message, забывая о том, что апдейты бывают разных типов, а значит Message может быть nil.

а пустой апдейт - это сказки

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

если по сложному, то не со всеми сисколами всегда так

есть оптимизации разные, чтобы не переключаться между тредами на быстрых сисколах

Никита
05.08.2018
20:51:51
Отлично, понял, спасибо

Где об этом можно почитать в деталях?

Никита
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
как влияют?
https://dave.cheney.net/tag/gomaxprocs

Slava
05.08.2018
20:55:55
Где об этом можно почитать в деталях?
https://github.com/golang/go/blob/master/src/runtime/proc.go

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

Никита
05.08.2018
20:56:49
https://rakyll.org/scheduler/

И там принцип работы обьясняется как то по другому

Sergey
05.08.2018
20:57:21
https://rakyll.org/scheduler/
> There are at most GOMAXPROCS spinning Ms at any time

Никита
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

Admin
ERROR: S client not available

Slava
05.08.2018
21:03:46
В доке по GOMAXPROCS GOMAXPROCS sets the maximum number of CPUs that can be executing simultaneously and returns the previous setting.
The number of logical CPUs on the local machine can be queried with NumCPU. This call will go away when the scheduler improves.

это следующее предложение

Никита
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
Это все еще касается логических процессоров
Что такое "логический процессор" в вашем случае?

Google
Roman
05.08.2018
21:07:10
logical CPU
Что это?

Sergey
05.08.2018
21:07:19
lmgtfy

Никита
05.08.2018
21:07:32
Что это?
поток процессора

грубо говоря, одно ядро

Если нет HT

с чего вы взяли что о другом?
1.GOMAXPROCS sets the maximum number of CPUs 2. GOMAXPROCS variable limits the number of operating system threads

Мне эти два понятия не кажутся одним и тем же ?

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
Почему в документации говорится о двух разных вещах?

А если у нас ht? А если cpu умеет до 8 потоков на ядро?
количество физических ядер * количество потоков на ядро

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

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