何时在 Clojure Web 应用程序中创建多个线程?
When are multiple threads created in Clojure web app?
我正在使用 luminus 和 ring 在 Clojure 中构建 Web 应用程序。我使用 lein uberjar 构建我的应用程序,然后使用 undertow 服务器构建它。
我的问题是,何时在单独的非阻塞线程中对应用程序发出请求 运行?
我已经通过向执行 (Thread/sleep 20000)
的页面发出请求来测试应用程序的并发性。如果我在 Chrome 中的两个选项卡中同时访问此页面,则在第一个选项卡加载后约 20 秒后才会加载第二个选项卡。因此,这两个访问似乎并没有创建不同的线程。
但是,如果我在一个 Chrome 选项卡和一个 Safari 选项卡中访问页面,两个选项卡会同时完成。如果我使用两个 Safari 选项卡,它们会同时完成。
这是如何工作的? undertow 何时为每个请求创建单独的线程?
编辑:此行为与 Undertow 或 Clojure 无关,而是 Chrome,正如@Piotrek Bzdyl 所指出的。请参阅下面的评论。
我认为您正在观察 Chrome 行为 - 它在整个 Chrome 应用程序中打开到给定 URL 的单个连接 - 如果您打开相同的 URL在不同的选项卡中,Chrome 将首先在一个选项卡中打开并下载资源,完成后将在另一个选项卡中进行同样的操作。
要在您的应用程序中测试并发性,您需要使用其他工具。您可以尝试 运行 多个 curl
命令或更好的 ab
工具:
ab -c 3 -n 3 https://www.google.com/
我正在使用 luminus 和 ring 在 Clojure 中构建 Web 应用程序。我使用 lein uberjar 构建我的应用程序,然后使用 undertow 服务器构建它。
我的问题是,何时在单独的非阻塞线程中对应用程序发出请求 运行?
我已经通过向执行 (Thread/sleep 20000)
的页面发出请求来测试应用程序的并发性。如果我在 Chrome 中的两个选项卡中同时访问此页面,则在第一个选项卡加载后约 20 秒后才会加载第二个选项卡。因此,这两个访问似乎并没有创建不同的线程。
但是,如果我在一个 Chrome 选项卡和一个 Safari 选项卡中访问页面,两个选项卡会同时完成。如果我使用两个 Safari 选项卡,它们会同时完成。
这是如何工作的? undertow 何时为每个请求创建单独的线程?
编辑:此行为与 Undertow 或 Clojure 无关,而是 Chrome,正如@Piotrek Bzdyl 所指出的。请参阅下面的评论。
我认为您正在观察 Chrome 行为 - 它在整个 Chrome 应用程序中打开到给定 URL 的单个连接 - 如果您打开相同的 URL在不同的选项卡中,Chrome 将首先在一个选项卡中打开并下载资源,完成后将在另一个选项卡中进行同样的操作。
要在您的应用程序中测试并发性,您需要使用其他工具。您可以尝试 运行 多个 curl
命令或更好的 ab
工具:
ab -c 3 -n 3 https://www.google.com/