何时在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应用程序中创建多个线程?的主要内容,如果未能解决你的问题,请参考以下文章