Oll*_*liP 6 java multithreading scheduling blocking
假设一些阻塞 I/O 是用 Java 完成的,例如长时间运行的数据库查询。Java 中是否有一种方法可以让某些 Java 数据库驱动程序告诉 JVM 调度程序该调用已离开 JVM,现在正在由某个外部系统处理?然后,JVM 可以将为数据库查询提供服务的线程分配给其他操作,直到数据库的回复到达。这样,阻塞数据库查询将有效地变为非阻塞。
只是想知道这是否可以在一般的 JVM 上完成。我从事 Java 工作很多年了,但我承认我不知道 Java 调度程序在这种情况下在做什么。
假设一些阻塞 I/O 是用 Java 完成的,例如长时间运行的数据库查询。Java 中是否有一种方法可以让某些 Java 数据库驱动程序告诉 JVM 调度程序该调用已离开 JVM,现在正在由某个外部系统处理?
呃,不。线程的全部意义在于,如果它们阻塞,则可以调度另一个线程来接管处理器或其他资源。您不希望 JVM 以某种方式使用保存所有 JDBC 状态、堆栈帧、变量等的同一线程。您确实希望它使用相同的处理器和其他系统资源来执行不同线程的任务。请记住,线程的开销相对较低。在现代系统上,当 JVM 中有 1000 个这样的堆栈时,您可能会开始遇到问题,主要是因为它们每个都分配了固定的堆栈空间区域。
作为程序员,我们优化这一点的方法是使用多个线程、线程池、数据库连接池等。然后,作为查询块,其他线程和查询可以并行工作,以最大化系统吞吐量。
| 归档时间: |
|
| 查看次数: |
1708 次 |
| 最近记录: |