170 похожих чатов

Вопрос про горутины. Как я понял. По умолчанию у системы получается

по 1 треду на каждое ядро.
Т.е. у меня 4 ядра, значит, приложение написанное на Go будет использовать эти 4 треда.
За перекидывание задач между тредами отвечает планировщик.
Так вот вопрос.
А если у меня всего одно ядро. Значит ли это, что у меня будет фактически однопоточное приложение, которое всё делает синхронно?
Просто очень странно это, если так.
Вот допустим пишу я WebAPI и в отдельной горутине запускаю бесконечный цикл. А раз ядро одно, то и тред один, то и апишка запросы принимать не сможет, потому что тред всегда занят. Ещё не пробовал, но уверен, что это не так.
Значит моё знание, что у системы забирается только 1 тред тоже неверно.
Как на самом деле дела обстоят?

11 ответов

19 просмотров

асинхронно будет делать, в го переписали планировщик

Mikhail- Автор вопроса
Simon S
асинхронно будет делать, в го переписали планировщ...

Т.е. там теперь прерывания или увеличили число тредов?

Mikhail
Т.е. там теперь прерывания или увеличили число тре...

раньше была кооперативная, щас стала вытесняющая

Simon S
раньше была кооперативная, щас стала вытесняющая

Как была кооперативная, так и осталась

Оно будет периодически отдавать ядро то одной то другой горутине. Другими словами будет синхронно но конкурентно.

Mikhail- Автор вопроса
Mikhail
А оно, это кто? Планировщик?

да. он в отдельном треде

Mikhail
А оно, это кто? Планировщик?

Планировщик Go на одном треде операционной системы запускает последовательно много Go-рутин. Go-рутина это не тред операционной системы.

Так вопрос про горутины или всё же про треды? Треды - абстракия ОС. Горутины - гошная. Число тредов в ОС и число ядер компа не равны друг другу. Может быть много тредов на 1м ядре. Горутины это абстракция более выского уровня. На 1м треде может быть много горутин.

Mikhail- Автор вопроса
Rostislav Teryaev
Так вопрос про горутины или всё же про треды? Тред...

Да, это понятно. Ребята рассказали как оно работает сейчас.

У меня два ядра, но потоков четыре. Кстати можно выставить и больше, через переменную. Но не уверен что будет эффект, нужно мерять.

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта