当前位置: 首页 > 知识库问答 >
问题:

什么时候在Clojure web应用程序中创建多个线程?

柴砚文
2023-03-14

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

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

我通过对执行(thread/sleep20000)的页面执行请求来测试应用程序的并发性。如果我同时在Chrome中的两个选项卡中访问此页面,第二个选项卡将在第一个选项卡加载后大约20秒内才加载。因此,这两次访问似乎并没有创建不同的线程。

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

编辑:此行为与Undertow或Clojure无关,而是Chrome,正如@piotrek bzdyl指出的那样。见下面的评论。

共有1个答案

鱼志诚
2023-03-14

我想你正在观察Chrome的行为--它在整个Chrome应用程序中打开到给定URL的单个连接--如果你在不同的标签页中打开相同的URL,Chrome将首先在一个标签页中打开并下载资源,一旦完成,在另一个标签页中也会打开并下载资源。

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

ab -c 3 -n 3 https://www.google.com/
 类似资料:
  • 3 CoreFoundation CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION+28 4 CoreFoundation__CFrunloopdoTimer+880 5 CoreFoundation__CFrunloopdoTimers+276 10 Figment POS AppDelegate.Swift-第39行main+39 11

  • 问题内容: 我知道Deamon是后台线程。我们可以通过调用创建自己的守护程序线程。 我的问题是:为什么以及何时需要将我们的线程创建为守护程序线程? 问题答案: 当所有正在运行的线程都是守护程序线程时,JVM将退出。因此,想象一下您正在编写一个简单的游戏,其中您的主要方法一直循环直到您决定退出为止。想象一下,在游戏开始时,您启动了一个线程,该线程将不断轮询某些网站以触发警报。当您决定结束游戏时,您希

  • 问题内容: 因此,我对Node.js的工作方式有所了解:它具有一个侦听器线程,该线程接收事件,然后将其委托给工作池。工作线程一旦完成工作,便会通知侦听器,然后侦听器将响应返回给调用者。 我的问题是:如果我在Node.js中建立一个HTTP服务器,并在我的一个路由路径事件(例如“ / test / sleep”)中调用sleep,那么整个系统就会停顿下来。甚至是单个侦听器线程。但是我的理解是这段代码

  • 问题内容: 什么时候应该创建一个检查异常,什么时候应该创建一个运行时异常? 例如,假设我创建了以下类: 我应该如何创建我的?它应该扩展还是?还是我应该只使用它? 问题答案: 在这个话题上有很多分歧。在我的上一份工作中,我们遇到了一些实际问题,运行时异常被遗忘了,直到它们出现在生产环境中(在ageswards.com上),因此我们决定只使用已检查的异常。 在我目前的工作中,我发现在很多情况下都有很多

  • 我已经学习了Vue.js的生命周期钩子,但没有找到任何实际的场景,其中创建()函数被使用? 我知道created()函数可以访问被动数据和事件,但不能访问DOM元素。但实际上我不知道如何使用它。请有人帮我提供使用Created()函数的实际场景。提前谢谢。

  • 问题内容: 我想知道将所有表单都写在spring标记中是一种好习惯吗,还是可以将spring表单标记与html表单标记混合使用? 问题答案: 当您需要Spring表单提供的功能时,请使用它们: 绑定到对象 可配置的字段格式 重新显示错误值 错误消息的绑定 对于简单表单(例如每个页面上的简单搜索框),通常不需要这些功能-因此,您可以为它们使用简单的HTML表单。