何时在Clojure Web应用程序中创建多个线程?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了何时在Clojure Web应用程序中创建多个线程?相关的知识,希望对你有一定的参考价值。

我正在使用luminus和ring在Clojure中构建一个Web应用程序。我使用lein uberjar构建我的应用程序,然后使用underow服务器构建它。

我的问题是,什么时候对应用程序的请求在单独的非阻塞线程中运行?

我通过向执行(Thread/sleep 20000)的页面发出请求来测试应用程序的并发性。如果我在Chrome中的两个标签中同时访问此页面,则在加载第一个标签后约20秒后才会加载第二个标签。因此,这两个访问似乎不会创建不同的线程。

但是,如果我在一个Chrome标签和一个Safari标签中访问该页面,则两个标签同时完成。如果我使用两个Safari选项卡,它们会同时完成。

这是如何运作的?什么时候为每个请求创建单独的线程?

编辑:这种行为与Undertow或Clojure无关,而是与@Piotrek Bzdyl指出的Chrome有关。见下面的评论。

答案

我认为您正在观察Chrome的行为 - 它会在整个Chrome应用中打开与指定网址的单一连接 - 如果您在不同的标签页中打开相同的网址,Chrome会首先在一个标签页中打开并下载资源,一旦完成,它就会在另一个标签中相同。

要在应用程序中测试并发性,您需要使用其他工具。您可以尝试运行多个curl命令甚至更好的ab工具:

ab -c 3 -n 3 https://www.google.com/

以上是关于何时在Clojure Web应用程序中创建多个线程?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Clojure 中创建具有负指数的幂函数?

无法在新的CCW独立安装中创建Clojure项目或命名空间

如何在nodejs中创建线程

在jmeter测试计划中创建多个线程组

在 ASP.NET Web API 中创建一个线程每 X 秒执行一次特定代码

可以在多线程 DLL 的接口函数中创建线程吗?