代码之家  ›  专栏  ›  技术社区  ›  Milner

我可以让PerlIthreads在Windows中并发运行吗?

  •  2
  • Milner  · 技术社区  · 17 年前

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

    我以为我知道线程可以进行并发处理,但有点不对劲。有什么想法吗,或者我应该做些别的Perl魔法吗?

    3 回复  |  直到 17 年前
        1
  •  4
  •   Frosty    17 年前

    一些可能的解释:

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

    2. 步骤1-6中是否有事务或锁会阻止并发执行?

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

        2
  •  2
  •   Daren Thomas    17 年前

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

    我怀疑你这里正在进行某种同步。可能只有一次调用SQL*PLUS?有些程序会这样做…

    其他可能性:

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

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

        3
  •  1
  •   Brad Gilbert    17 年前

    检查数据库设置。您可能会发现它是以保守的方式设置的。这将导致即使是较小的读取也会阻止对该信息的所有访问。

    您可能还需要打电话 threads::yield .