java - for循环中的上下文切换
问题描述
我有以下java代码。在执行过程中会发生任何“上下文切换”吗?
Collection<MyBusinessClass> myCollection = getMyCollection();//has 1000 items
for (MyBusinessClass item : myCollection) {
new Thread(() -> {
MyLongRunningTask();
}).start();
谢谢。
解决方案
除非您有足够的核心来托管所有 1000 个线程(+ 1 个主要线程)+ JVM 需要的任何少量线程,例如 GC 和终结器,否则您的线程将不得不共享核心。因此会发生上下文切换。我在这里假设MyLongRunningTask
实际上运行了足够长的时间,以使它们在最后一个生成时仍然处于活动状态,否则所需的可用内核数量可能会低一些。
我们可以尝试通过具有非常短的任务(或相当疯狂的调度程序)来构建调度程序实际上如何顺序运行所有任务的场景,而不是“重叠”,这样您就可以摆脱少量的 CPU 内核。但这似乎离题了。
推荐阅读
- mongodb - MongoError: E11000 使用数组对象收集重复键错误
- mysql - 为什么当我启动/停止/重新启动运行烧瓶休息应用程序的 uWSGI 时我的数据库会清空
- python - 如何使用输入对该功能进行单元测试?
- aframe - 获取aframe的相机角度
- python - 如何重命名,熊猫中没有列名?
- flutter - 如何在颤动的主题中设置TextFormField的样式
- c++ - 将整个自我可执行文件复制到内存c ++
- python - 可以更改 Altair 或 Pandas 上的日期语言吗?
- javascript - if 语句未在异步函数内运行
- java - 嵌套异常是 org.hibernate.id.IdentifierGenerationException:必须在调用 save() 之前手动分配此类的 id: