我可以在Windows中同时运行Perl ithreads吗?

时间:2008-09-17 18:37:46

标签: perl multithreading concurrency

我有一个Perl脚本,我正在尝试使用Perl Threads设置(使用线程)。当我运行简单测试时,一切正常,但是当我执行我的实际脚本(其中线程运行多个SQL Plus会话)时,每个SQL Plus会话按顺序运行(即,线程1的sqlplus运行步骤1 -5,然后线程2的sqlplus运行步骤6-11等。)。

我以为我理解线程会进行并发处理,但有些不对劲。任何想法,还是我应该做其他Perl魔术?

3 个答案:

答案 0 :(得分:4)

一些可能的解释:

  1. 您是在多核处理器还是多处理器计算机上运行此脚本?如果您只有一个CPU,则只有一个线程可以随时使用它。

  2. 步骤1-6是否涉及会阻止同时执行的事务或锁定?

  3. 您确定要使用多个数据库连接而不是在线程之间共享一个连接吗?

答案 1 :(得分:2)

实际上,您无法保证线程执行的顺序。所以这种行为(如果不是你所期望的那样)并没有真正错误。

我怀疑你在这里有某种同步。可能SQL * Plus只能让它自己被调用一次?有些程序会这样做......

其他可能性:

  • 创建线程和创建进程(为SQL * Plus创建子进程,不是吗?)比运行线程花费的时间更长,因此线程1在线程2之前完成开始

  • 您正在SQL脚本中使用强制同步数据库更新的事务。

答案 2 :(得分:1)

检查数据库设置。您可能会发现它以保守的方式设置。这甚至会导致次要读取阻止对该信息的所有访问。

您可能还需要致电threads::yield