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