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