问题描述
我想了解在生产级服务器端应用程序中执行阻止CPU操作的最佳实践/方法。 (请注意,我说的是服务器端而非Android应用)
阻止CPU操作是什么意思?
运行并消耗CPU的操作,例如,巨大的矩阵乘法,在while循环中完成的巨大数据转换等。
我的设置
- 我们正在建造由协程驱动的kotlin dsl
- 我们使用单线程创建了自己的
CoroutineScope
用于非阻塞操作,因此回调中的变异变量是线程安全的,因为它们都在同一线程上运行 - 我们建议用户使用
withContext(Dispatchers.IO)
来执行所有阻塞的IO操作
悬而未决的问题
-
我们有固定的策略来执行非阻塞操作和线程安全突变,以及执行如上所述的
IO
操作 -
我们正在探索如开始所述那样执行阻塞CPU绑定操作的选项
某些解决方案
-
使用
Dispatchers.Default
来阻止CPU操作- 是否有人预见到使用默认调度程序会有任何问题?
- 如果代码/传递库的其他部分也使用
Default
调度程序怎么办?
-
使用固定线程(通常等于CPU线程数)创建单独的
CoroutineScope
,然后要求我们的用户使用该隔离的范围来运行任何受CPU限制的阻塞操作
我们应该采用哪种方法?利弊?还有其他替代好的方法吗?
旁注
来自Scala,通常不建议使用Global执行上下文,并且Dispatchers.Default
以某种方式映射到全局上下文
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)