问题标签 [single-threaded]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 调用已经在新线程中调用的方法
我有一个在新线程中调用的方法“ImportExcel”:
现在在 ImportExcel() 函数中,有一个 try catch 块。在 catch 块中,如果发生特定异常,我希望再次调用 ImportExcel() 函数。我怎么做?
javascript - 一台服务器能否同时向一台机器提供多个网页?
Web 服务器在处理单台机器时是否可以异步处理和响应对同一域的多个请求?请求是使用 Javascript 完成的。
在这种情况下,服务器如何工作?它一次处理和发送一个请求吗?例如,如果我想同时从 Web 服务器加载五个不同的页面,页面 2 是否必须等到页面 1 在我的机器上完成加载?还是可以同时加载第1页和第2页?
谢谢。
c# - Is it possible to stop single threaded execution of code from UI?
In my solution I got a user interface where some word automation is started by a buttonclick (lets call that button wordStart). I want to break this word automation with another buttonclick (lets call that button wordBreak).
However when I click the wordStart the user interface freezes while doing the work and it's not possible for me to click the wordBreak button. I'm still a bit new to programming so for me this must be because the application is single threaded or atleast I could solve it with multithreading.
So this is a 2 in 1 question. 1. Is it possible to stop the execution of code with a single threaded application? 2. How do I stop the execution of code?
For question number 2 I looked a bit around the internet and found these methods which I think will work, but other suggestions are welcome:
EDIT: As I thought this should be done with multi threading. I don't have that much experience with that so I've added this code to the question if anyone would like to help me out here. In the meantime I will look for a solution to this myself.
javascript - nodejs单线程?如果有很多并发请求,它是如何工作的
我是nodejs的新手,目前正在学习它。我知道nodejs是单线程的,但是我想知道:如果我使用非阻塞方法,例如有20000个并发请求,并且有一个请求需要很长时间,其他线程需要更短的时间。
所以一旦遇到时间较长的请求,nodejs会说“hi,请暂停,其他请求需要使用”,nodejs有没有默认时间检测这个是否需要暂停?如果我使用了错误的词“puase”,请纠正我(因为我认为因为它是单线程的,所以如果要处理另一个请求,它应该停止计算一个请求)。
在我假设的情况下,更长的请求需要很多时间才能处理?
javascript - JavaScript 的单线程模型如何处理耗时的任务?
这个问题是关于 JavaScript 的单线程模型的。我知道javascript本质上是非阻塞的,因为它能够向异步事件队列添加回调。但是如果回调函数确实需要很长时间才能完成,那么 JavaScript 会不会因为它是单线程的而在这段时间内阻塞其他所有内容?nodejs如何处理这样的问题?而对于前端的开发者来说,这是一个无法回避的问题吗?我问这个问题是因为我读过它通常是保持功能任务尽可能小的好习惯。真的是因为 javascript 中的长任务实际上会阻塞其他任务吗?
asp.net - 在 ASP.NET 中将线程设置为 STA
我正在尝试在我的 .ascx 文件中复制到剪贴板。由于这是 ASP.NET,因此没有将 [STAThread] 放在上面的 main 函数。
我收到一条错误消息:“在进行 OLE 调用之前,必须将当前线程设置为单线程单元 (STA) 模式。确保您的 Main 函数上标记了 STAThreadAttribute。”
在我的 ascx.cs 文件中,我有using System.Windows.Forms;
一行代码Clipboard.SetText("Hello, clipboard");
我试图找到一个解决方案,但大多数解决方案都假设有一个主要的,或者说要删除 dll。这些解决方案不适合我的情况。
javascript - NodeJS:理解非阻塞/事件队列/单线程
我是 Node 的新手,并尝试了解 node 的非阻塞性质。
在下图中,我创建了请求的高级图表。
据我了解,来自单个用户的单个应用程序的所有进程都在单个线程上运行。
我想了解的是事件循环的逻辑如何适合这个图表。事件循环是否与指令排队的处理器管道相同?
想象一下,我们将一个应用页面加载到 RAM 中,该页面创建一个流以供程序读取:
创建读取流和等待数据发生的指令:该指令是否“挂起”在处理器的寄存器中(等待 I/O 完成),而在多线程环境中,处理器只是不接受新指令直到前一个 I/O 请求的结果返回到 RAM 为止?
还是我认为这完全/部分错误的方式?
只是一个补充(相关的,也许是愚蠢的)问题:在服务器上的不同线程上运行不同的用户,单线程的好处不是只对单个用户有用吗?
我对这种类型的细节不熟悉,所以如果这个问题对你不完全有意义,请原谅。但在继续前进之前,理解这一点对我来说似乎是必不可少的。
c# - 是否可以为多个客户端创建单个套接字、单线程、TCP/IP 数据包读取器?
一个典型的服务器应用程序会为每个传入连接创建一个套接字,从而产生一个新线程。
但是,是否可以在单个线程中自己进行解复用?我想要的是应用程序为每个端点保留一个状态机,当数据在单个线程中可用时反序列化消息。
线程是最简单的,我有一个可行的实现。然而,每个线程都会很快增加开销,并且延迟连接将需要资源。我想要的是,相反,状态机为每个连接构建一条消息(线程代码已经这样做了),并在完成后将反序列化的消息分派到工作队列。
这在.NET中可能吗?P/Invoke 也是一个可接受的解决方案。
javascript - Event Loop、Callback Queue、Javascript的单线程是如何连接的?
总体目标
我想知道 javascript 环境的以下部分如何作为一个系统互连。
- Javascript引擎
- 事件循环
- 事件队列
我们可以将其限制在浏览器环境中,因为节点已在另一篇文章(此处)中介绍过
我(相信)理解的事情:
Javascript 是单线程的,因此只有一个调用栈。
Javascript 环境仅提供少数真正异步的函数。这些可能包括 setTimeout()、setInterval() 和 I/O 函数。
- 如果不使用其中之一,开发人员无法创建自己的异步函数。
- Javascript 本身是同步运行的,但是一旦当前调用堆栈被清除,通过它的异步函数可以回调可能的阻塞函数。
例子:
示例步骤:
(如果我错了,请更正步骤)
- 记录“同步代码开始...”
- setTimeout 被添加到堆栈但立即返回控制
- setTimeout 被发送到不同的“线程”……“工人”?在javascript的单线程之外计算2000毫秒
- 记录“同步代码完成...”
- 2000 毫秒后 asyncLog() 被推送到事件队列
- 因为调用堆栈是明确的,所以事件循环会检查事件队列中的待处理回调
- asyncLog() 从队列中移除并由事件循环推入堆栈
- 记录了“异步功能已完成”
- 调用堆栈现在很清楚
问题
如果有人可以概述异步函数(例如 setTimeout)从它们第一次到达调用堆栈到它们被回调到调用堆栈的时间和位置的步骤概述,那么这些不需要一一回答。
- 在第 3 步,谁产生了这个新线程?是浏览器吗?
- 这个新线程被阻止正确吗?
- 如果您有一个创建 1000 个 setTimeouts 的循环会发生什么。是否创建了 1000 个“线程”?
- 一次可以产生多少个线程有限制吗?
- 当新线程完成执行时,它是如何进入队列的?
- 谁提供事件队列?
- 谁提供事件循环?
- 事件循环是否轮询事件队列?
- javascript 的线程是否知道事件循环?还是事件循环只是将东西压入堆栈?
- 事件循环如何知道堆栈何时清空?
java - Single-threaded Java application starts over 70 threads
I just experienced a very strange behaviour of the (openJDK) JVM, when starting my single-threaded application on our compute server:
The JVM starts a lot (really a lot) of threads that heavily increase the CPU load on all processors and I don't have a suitable explanation for that [see image below].
I also tested a few more things:
- I also tried running it on a Amazon EC2 instance with ~200GB of RAM and got a similar result with just a few number of threads less.
- Instead of starting the app with
java -Xms4096M -Xmx100000M -jar ...
I tried smaller parameters likejava -Xms1024M -Xmx1024M -jar ...
and nothing changed.
Has anyone else already experienced such behaviour?
Or even better: can someone explain to me what is happening here?
EDIT:
I now have tried some of the things you have suggested and indeed got some valuable and also non-valuable output.
jstack PID
does not work and suggests me to use jstack -F PID
whose output for the main process is as follows.
kill -3 PID
doesn't output anything.
I'm not sure whether it belongs to kill or jstack, however I found this in the tmux:
I checked the PIDs of the running processes that generate the high CPU load -> they belong to the GC threads. I'm still not sure how a single threaded program can generate so much garbage that it keeps all those GC threads busy... but at least that's a starting point. Fully explaining and debugging the code (which is somewhat complex as it is a research project) would be clearly out of scope.
Maybe a last question directly concerning the topic: Is it possible to adjust the number of GC threads the JVM spawns?
I will now start debugging the garbage collection, e.g. by using -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails
, so if you know helpful tools or have any hints, please let me know. ;)