В этом коротком блоге давайте обсудим, как алгоритмы планирования повлияют на производительность сопрограмм или горутин.
Прежде чем перейти к Algo, давайте кратко расскажем о сопрограммах и горутинах.
В двух словах, обе являются облегченными версиями потоков на любом другом языке, мы можем думать о сопрограммах (Kotlin) и горутинах (Go) — это абстракции, которые выполняются поверх потоков.
Основным преимуществом использования подпрограмм по сравнению с потоком является то, что, как я уже сказал, они легковесны, и, что более важно, мы можем запускать тысячи или даже миллионы подпрограмм, что невозможно с потоками, занимающими огромную память.
Теперь давайте поговорим об основных различиях алгоритмов планирования по умолчанию в Kotlin и Go: в Kotlin используется совместное планирование, а в Go — упреждающее планирование.
Совместное планирование означает, что нам нужно писать сопрограммы таким образом, чтобы другие сопрограммы могли выполнять что-то вроде использования ключевых слов Yield, тогда как в Go lang горутины автоматически прерываются планировщиком в определенных точках.
Теперь давайте подумаем, почему Go выбрал алгоритм Preemptive, главным образом потому, что Go славится созданием высокомасштабируемых параллельных приложений и использованием ядер ЦП для параллельного выполнения.
Kotlin, с другой стороны, использует совместное планирование. Самое полезное в этом подходе — мы можем иметь более предсказуемое поведение кода, используя сопрограммы.
И самое главное, мы можем изменить алгоритмы планирования, если захотим для нашего варианта использования.
Вот и все, надеюсь, это дало вам некоторое представление об обоих алгоритмах и о том, как код с сопрограммами и горутинами будет выполняться по-разному в зависимости от алгоритмов планирования.
Похлопайте, если понравилось :)