2008-12-16 64 views

回答

5

Perl的DBI強制通過其內部單個線程,所以驅動器將只活性上一次在一個會話($dbh)。無論您擁有多少個CPU。因此,不支持多線程(因爲DBI中的所有內容都是單線程的),但在多線程應用程序中使用DBI(因此DBD :: Oracle)是安全的。

0

是的,無論您是否使用Oracle,使用Perl中的線程都是一個非常糟糕的主意。

雖然理論上,只要每個使用它自己的連接,它應該工作,perl 5.8 threads are fundamentally flawed

如果您瞭解該文章並仍想使用Perl線程,祝您好運。

2

那麼,DBI文件說,不使用螺紋Perl和指向Perlmonks post that explains that。告訴你不要這樣做的文檔是一個很好的理由。

不過,我已經看到了它的工作在某些平臺上得很好,但對別人慘敗。即使你真的把它運用起來,它也是不可移植的。

1

我用在Perl多線程進行基準測試的Oracle數據庫,我不得不創建每個線程數據庫處理程序。

0

一段時間回我mannaged得到一個ad-hock實現工作......我把連接w/dbi視爲一個有限的資源,並使用文件鎖定機制在Perl中的各個線程之間共享它。我的多線程應用程序只能通過作爲守護程序運行的獨立perl腳本連接到dbi。

在Linux上,多線程結束時通過fork完成的,在我使用的窗口無論用默認的activeperl實現(我忘了)

我試圖讓他們通過共享內存進行通信來了,但最終只使用一個共享文件來代替。 Linux有可靠的附加模式,所以它是一塊蛋糕。在Windows上,讓它們同步更困難。

最近我查看了數據庫事務,每個線程實例都有自己的連接到數據庫,並讓數據庫處理連接細節。

這是用mysql,但我確信oracle支持事務。

阿帕奇::在保持這些連接腳本的每次運行通道之間活着DBI作品/與的mod_perl打得很好(我用這個之前,做每一個連接是非常耗時)。

您的結果會有所不同。

相關問題