有没有人知道使用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”作为一个程序的单独实例。