2008-12-16 105 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打得很好(我用这个之前,做每一个连接是非常耗时)。

您的结果会有所不同。

相关问题