Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Есть ли контекст для сопрограмм, который создает новые потоки до предела, например ThreadPoolExecutor?

Автор вопроса: usbpc102Ответов: 1

Я хотел бы, чтобы мое приложение немного автоматически масштабировалось, если будет поступать больше запросов, но я также хотел бы использовать неблокирующие сопрограммы, предоставляемые Kotlin.

Глядя на документацию, кажется, что единственный способ получить контекст из stdlib - это использовать _ 1_ или _ 2_ оба создают экземпляры _ 3_, но похоже, что это все.

Есть ли способ получить что-то похожее на ThreadPoolExecutor в java, которое просто запускает новые потоки, если в настоящее время ни один поток не может выполнить работу до заданного предела для CoroutineContext в Kotlin? Это вообще правильный подход к сопрограммам?

kotlinkotlin-coroutines

Ответы

Ответ 1 · рейтинг 3 · Marko Topolnik

Вы можете превратить любой Executor, который у вас есть, в контекст сопрограммы:

val MyContext = myExecutor.asCoroutineDispatcher()

Это вообще правильный подход к сопрограммам?

Это больше зависит от того, что вы делаете с сопрограммами, чем от того, какой пул потоков вы используете.

Я использую кэшированный пул потоков, как вы его описали, в своем приложении. Это приложение для Android, поэтому важно оставаться стройным. Я использую пул потоков как для блокировки сетевых операций, так и для работы с интенсивным использованием ЦП, которую я должен выполнять вне потока графического интерфейса. В таком случае вы не launch (MyThreadPool) свои сопрограммы, а launch(UI), а затем withContext(MyThreadPool) { heavyWork }.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы