有沒有人知道使用Oracle DBI編寫多線程Perl應用程序時遇到的任何困擾或問題?每個線程都有自己的連接到Oracle。我可以在Perl的DBI和Oracle上使用多線程嗎?
我聽說的最長時間內,Perl與Oracle不支持多線程。
有沒有人知道使用Oracle DBI編寫多線程Perl應用程序時遇到的任何困擾或問題?每個線程都有自己的連接到Oracle。我可以在Perl的DBI和Oracle上使用多線程嗎?
我聽說的最長時間內,Perl與Oracle不支持多線程。
Perl的DBI強制通過其內部單個線程,所以驅動器將只活性上一次在一個會話($dbh
)。無論您擁有多少個CPU。因此,不支持多線程(因爲DBI中的所有內容都是單線程的),但在多線程應用程序中使用DBI(因此DBD :: Oracle)是安全的。
是的,無論您是否使用Oracle,使用Perl中的線程都是一個非常糟糕的主意。
雖然理論上,只要每個使用它自己的連接,它應該工作,perl 5.8 threads are fundamentally flawed。
如果您瞭解該文章並仍想使用Perl線程,祝您好運。
那麼,DBI文件說,不使用螺紋Perl和指向Perlmonks post that explains that。告訴你不要這樣做的文檔是一個很好的理由。
不過,我已經看到了它的工作在某些平臺上得很好,但對別人慘敗。即使你真的把它運用起來,它也是不可移植的。
我用在Perl多線程進行基準測試的Oracle數據庫,我不得不創建每個線程數據庫處理程序。
一段時間回我mannaged得到一個ad-hock實現工作......我把連接w/dbi視爲一個有限的資源,並使用文件鎖定機制在Perl中的各個線程之間共享它。我的多線程應用程序只能通過作爲守護程序運行的獨立perl腳本連接到dbi。
在Linux上,多線程結束時通過fork完成的,在我使用的窗口無論用默認的activeperl實現(我忘了)
我試圖讓他們通過共享內存進行通信來了,但最終只使用一個共享文件來代替。 Linux有可靠的附加模式,所以它是一塊蛋糕。在Windows上,讓它們同步更困難。
最近我查看了數據庫事務,每個線程實例都有自己的連接到數據庫,並讓數據庫處理連接細節。
這是用mysql,但我確信oracle支持事務。
阿帕奇::在保持這些連接腳本的每次運行通道之間活着DBI作品/與的mod_perl打得很好(我用這個之前,做每一個連接是非常耗時)。
您的結果會有所不同。
您可以嘗試使用shell「multithreading」代替。在http://alexhanin.blogspot.com/2010/07/multithreading-with-nothing-but-korn.html 中描述你可以把你的perl放在shell包裝器中,然後使用每個shell「thread」作爲一個程序的單獨實例。