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

问题描述 投票:1回答:1

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

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

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

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

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

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

multithreading clojure undertow
1个回答
1
投票

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

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

ab -c 3 -n 3 https://www.google.com/
© www.soinside.com 2019 - 2024. All rights reserved.