Rak*_*ain 2 go goroutine gorilla
我们正在使用gorilla mux框架来处理Web请求,我想它会在所有cpu核心上自动运行.在这种情况下使用go例程是否有利于cpu密集型进程,例如循环遍历大型对象?
我想自动运行在所有的cpu核心上.
你猜错了.有点.
从Go 1.5开始,Go将通过在不同核心上运行go例程来使用所有核心.但如果你不使用go例程,就没有办法利用它.
在这种情况下使用go例程是否有利于cpu密集型进程,例如循环遍历大型对象?
可以有.但是你问的是错误的问题.
您不首先使用Go例程来利用不同的CPU核心(尽管这也是一个好处).您可以使用Go例程来防止程序在执行需要一段时间的操作时阻塞.
对于Web应用程序,大多数请求通常不是 CPU密集型的.但他们通常会花很多时间(以计算机术语)等待事情的发生.他们等待请求主机名上的DNS查找,等待数据库查找用户凭据以建立会话,等待数据库存储或返回行以生成HTTP响应等.
没有常规,在做这些事情时,你的服务器将无法做任何其他事情.因此,如果典型的HTTP请求花了1秒钟来查找DNS,验证授权cookie,从数据库中查找结果并发送响应,则不能同时提供其他HTTP客户端.
幸运的http是,Gorilla(以及Go的几乎所有其他Web框架)使用的包已经使用Go例程来处理请求.所以你已经在每个HTTP请求中使用(至少)一个Go例程.
使用额外的go例程是否有意义取决于您的应用程序设计,而不是"使用更多的CPU核心".
一些建议:
| 归档时间: |
|
| 查看次数: |
1160 次 |
| 最近记录: |