新手问题 这种情况下多线程能否减少总时长?

u4crella · May 05, 2020 · Last by huacnlee replied at May 12, 2020 · 3052 hits

主队列 queue=Queue.new

函数 A,下载多个远程网页的内容,把结果插入到 queue;每下载一次后睡眠 2 秒。

函数 B,从队列获取内容进行分析,生成结果并保存到 SQLite 数据库。分析的时间可能大于 2 秒;分析期间,程序占用 CPU 单核的全部资源。

如果把函数 B 放在主线程,函数 A 用一个新线程来执行,这样也能减少总运行时长吗?

取决于用的 io 有没有 non-blocking 的实现,理论上是有的,所以可以减少。不过这个减少不是由于等了 2s,如果 io 可以不阻塞,那么等待 io 的线程就会自动 pass,不需要手动 sleep

可以的,A 等待网络响应的时候,B 可以使用 CPU 的,能起到一定的并行效果

You need to Sign in before reply, if you don't have an account, please Sign up first.