本文介紹了從Java啟動的數據庫查詢是否總是阻塞I/O?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
假設一些阻塞I/O是在Java中完成的,例如長時間運行的數據庫查詢。在Java中,通常有沒有一種方法可以讓一些Java數據庫驅動程序告訴JVM調度器,調用已經離開JVM,現在正在由某個外部系統處理?然后,JVM可以將服務數據庫查詢的線程分配給某個其他操作,直到來自數據庫的回復到達為止。這樣,阻塞數據庫查詢將有效地變為非阻塞。
我只是想知道是否可以在一般的JVM上這樣做。我使用Java已經有很多年了,但我必須承認,我不知道Java調度程序在這種情況下會做什么。
推薦答案
假設一些阻塞I/O是在Java中完成的,例如長時間運行的數據庫查詢。在Java中,通常有沒有一種方法可以讓一些Java數據庫驅動程序告訴JVM調度程序,調用已經離開JVM,現在正在由某個外部系統處理?
呃,不。線程的全部意義在于,如果它們阻塞,則可以調度一個不同的線程接管處理器或其他資源。您不希望JVM以某種方式使用相同的線程,該線程保存所有的JDBC狀態、堆棧幀、變量等。您確實希望將相同的處理器和其他系統資源用于不同線程的任務。請記住,線程的開銷相對較低。在現代系統上,當JVM中有數千個堆棧時,您可能會開始遇到問題,主要是因為它們每個都分配了一個固定的堆棧空間區域。
作為程序員,我們對此進行優化的方法是使用多線程、線程池、數據庫連接池等。然后,當查詢阻塞時,其他線程和查詢可以并行工作,以最大化系統吞吐量。
這篇關于從Java啟動的數據庫查詢是否總是阻塞I/O?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,