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

时间:2018-03-05 23:36:32

标签: multithreading clojure undertow

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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