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

我可以让Perl在Windows中同时运行吗?,perl,multithreading,concurrency,Perl,Multithreading,Concurrency,我有一个Perl脚本,我正在尝试使用Perl线程(使用线程)设置它。当我运行简单测试时,一切正常,但当我执行实际脚本(其中线程运行多个SQLPlus会话)时,每个SQLPlus会话按顺序运行(即,线程1的SQLPlus运行步骤1-5,然后线程2的SQLPlus运行步骤6-11,等等) 我想我理解线程会进行并发处理,但有点不对劲。有什么想法吗,或者我应该做一些其他的Perl魔术吗?实际上,您无法保证线程的执行顺序。因此,这种行为(如果不是你所期望的)并不是真的错误 我怀疑你在这里进行了某种同步。可

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


我想我理解线程会进行并发处理,但有点不对劲。有什么想法吗,或者我应该做一些其他的Perl魔术吗?

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

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

其他可能性:

  • 线程创建和进程创建(您正在为SQL*Plus创建子进程,不是吗?)比运行线程需要更长的时间,因此线程1在线程2启动之前就完成了

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


    • 一些可能的解释:

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

    • 在步骤1-6中是否有事务或锁会阻止它同时进行

    • 您确定正在使用多个数据库连接,而不是在线程之间共享一个连接吗


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


      您可能还需要调用
      threads::yield

      I,并猜测其他人是否对这个问题感兴趣。你找到解决办法了吗?这里的答案有用吗?弗罗斯蒂说的。。。问题是什么?只有一个DB连接发生,这不是我所期望的。谢谢你的想法(从未想过要检查),现在我有工作要做。。。