背景:客户端(生产者)发一个请求到后端服务器,服务器需要三个步骤来处理这个请求,第一个是网络 io,需要固定 100ms 左右,第二个是 cpu 密集型的,需要 150ms 左右;第三个也是网络 io,需要 50ms 左右,也就是整个过程平均需要耗时 300ms,而且没法减少这个处理时间。
处理:不管怎么优化,一个请求耗时 300ms 左右这个是固定的,异步和线程池之类的只能增大并发量对吧。最好的处理办法是不是线程池阻塞队列满的时候,依靠拒绝策略直接 reject 一些请求?要不然处理连接的线程都是阻塞,导致整个程序很快就没法正常工作了。还想过用消息队列,例如 python 的 lecery,但是考虑下生产者速度远远大于消费者,即使任务全部抛到消息队列,后端线程一个一个去拉消息处理,这样其实后面的任务基本是耗时越来越长对吧。
提问:这种情况只能增加服务器,靠服务器抗住?
PS:如果用异步的话,想问下,三个过程是分别异步,还是在一个线程里面处理好?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.