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

u4crella · 2020年05月05日 · 最后由 huacnlee 回复于 2020年05月12日 · 3055 次阅读

主队列 queue=Queue.new

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

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

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

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

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

需要 登录 后方可回复, 如果你还没有账号请 注册新账号