主队列 queue=Queue.new
函数 A,下载多个远程网页的内容,把结果插入到 queue;每下载一次后睡眠 2 秒。
函数 B,从队列获取内容进行分析,生成结果并保存到 SQLite 数据库。分析的时间可能大于 2 秒;分析期间,程序占用 CPU 单核的全部资源。
如果把函数 B 放在主线程,函数 A 用一个新线程来执行,这样也能减少总运行时长吗?
取决于用的 io 有没有 non-blocking 的实现,理论上是有的,所以可以减少。不过这个减少不是由于等了 2s,如果 io 可以不阻塞,那么等待 io 的线程就会自动 pass,不需要手动 sleep
可以的,A 等待网络响应的时候,B 可以使用 CPU 的,能起到一定的并行效果