对于apache和django的组合,我相当陌生,坦白地说,如何处理multithreading。 具体来说,我运行在Windows服务器上,所以我知道MPM只是基于线程的。
我有一个服务于网站页面的应用程序,另一个应用程序执行一个不断发生的cpu密集型后台进程,时间长达30秒左右。 我担心我可能会遇到性能问题,并有几个问题,我希望这些也可以帮助其他人…
谢谢
一般阅读请看:
apache如何在线程之间分配并发请求?
对于multithreadingconfiguration,有一个预先创build的线程池。 当一个新的请求到达时,会被切换到池中的一个可用线程进行处理。 完成后,线程返回到池中。
apache如何在CPU之间分配并发请求?
它并不是,在任何特定时间点运行的线程都由操作系统决定。 线程没有被Apache绑定到特定的处理器,所以执行可以四处移动。
每个请求是否生成一个单独的线程?
对于由Apache处理的Web请求,答案是否定的。
我可以手动指定某个应用程序在独立的CPU上运行吗?
有许多方法可以设置处理器关联性,以便将进程绑定到处理器,但是您如何执行这些操作是依赖于系统的。 就我所知,Apache本身并没有提供任何configuration机制来实现这一点。
multithreading如何读/写同一个数据库?
小心。 通常数据库服务器进程担心所有这一切,所以你不必担心。 在客户端中,您需要确保每个线程都使用自己的数据库连接,为每个请求创build一个连接,或者您有一个数据库连接池,线程在需要时从池中获取连接,并在返回时返回完成。
请注意,这假定一个数据库,其中访问是通过服务器进程调解的。 如果您正在使用基于文件系统的数据库,则数据库客户端库应确保multithreading访问是安全的。
如果我有多台这样的机器,例如在EC2上运行并且有多个实例,会发生什么? 如何分发请求?
您需要某种前端负载均衡器来分配请求。 这可能是一个适当的负载平衡器,或者你可能使用一个nginx的前端作为代理。