我有一个8核、16线程的处理器。我写了一个可以发送数千封电子邮件的脚本,这是一项CPU密集型任务。最初,我只是在网络浏览器上执行一次脚本,并等待几分钟才能完成。然后我意识到我有一个8核、16线程的处理器,我所做的是在web浏览器中打开多个选项卡,并使用4个不同选项卡中的相应参数执行相同的脚本。数千封电子邮件的发送时间是我一次从一个标签页发送所有电子邮件所需时间的1/4。
通过从不同的选项卡同时执行我的脚本4次来发送8000封电子邮件所花费的时间是通过执行一次脚本并等待过程完成来发送8000所花费时间的1/4。我利用了一个8核16线程处理器的优势。我可以并行运行我的脚本多少次以进一步加快进程?如果我能同时运行16次,那将需要1/16的时间!这就是16线程处理器允许我做的吗?非常感谢。
我从web浏览器的不同选项卡同时执行了8次脚本。在参数中,每个选项卡都被配置为发送2000封电子邮件,因此通过执行同一脚本8次,2000封电子邮件*8个选项卡=16000封电子邮件同时发送。我的理由是,我拥有的8核16线程处理器应该能够处理这一问题,并比我一次执行脚本发送16000封电子邮件更快。
从日志来看,8次执行中只有5次可以同时运行。当前5名中的一名完成比赛时,第6名开始比赛。当前5名中的另一名完成比赛时,第7名和第8名开始比赛。所以,至少我知道跑步不要超过4次。在5次跑步的情况下,我在463秒内发送了10000封电子邮件。
我的脚本的工作方式是,每成功发送100封电子邮件,我就会在数据库中记录增量。
当我在数据库中有这个时,网站就瘫痪了:
`emails`.`id`: 35 --> `emails`.`sent`=1300
`emails`.`id`: 34 --> `emails`.`sent`=1300
`emails`.`id`: 33 --> `emails`.`sent`=1400
`emails`.`id`: 32 --> `emails`.`sent`=1400
`emails`.`id`: 31 --> `emails`.`sent`=1400
当网站再次回归时,我看到的第一件事是:
`emails`.`id`: 38 --> `emails`.`sent`=200
`emails`.`id`: 37 --> `emails`.`sent`=200
`emails`.`id`: 36 --> `emails`.`sent`=300
`emails`.`id`: 35 --> `emails`.`sent`=2000
`emails`.`id`: 34 --> `emails`.`sent`=2000
`emails`.`id`: 33 --> `emails`.`sent`=2000
`emails`.`id`: 32 --> `emails`.`sent`=2001
`emails`.`id`: 31 --> `emails`.`sent`=2001
最后,我成功地发送了大约8000封电子邮件:
`emails`.`id`: 38 --> `emails`.`sent`=2000
`emails`.`id`: 37 --> `emails`.`sent`=2000
`emails`.`id`: 36 --> `emails`.`sent`=1999
`emails`.`id`: 35 --> `emails`.`sent`=2000
`emails`.`id`: 34 --> `emails`.`sent`=2000
`emails`.`id`: 33 --> `emails`.`sent`=2000
`emails`.`id`: 32 --> `emails`.`sent`=2001
`emails`.`id`: 31 --> `emails`.`sent`=2001