问题标签 [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.

0 投票
2 回答
999 浏览

c# - 如何将工作编组到单线程c#

我有一个应用程序需要处理来自 UDP 广播的一些数据包,并将结果写入 SQL 数据库。在间隔期间,传入数据包的速率变得非常高,并且我发现底层缓冲区溢出,即使是 8MB,因为数据库写入速度很慢。

为了解决这个问题,我提出了两个选项,缓存一些数据库写入,和/或将数据库写入编组到另一个顺序操作线程。(必须保留数据库写入的顺序)。

我的问题是如何使用 c# 的内置结构/功能最有效地编组工作?

我是否应该只拥有一个同步队列,将委托工作项放在它上面,并在事件循环中让一个线程为它服务?

0 投票
1 回答
385 浏览

lisp - 如何检查另一端是否从单个线程关闭了我的套接字流?

usocket FAQ建议我应该这样做的方式是从 a 中读取socket-stream并检查end-of-file结果。这适用于每个套接字有一个线程处于活动状态的情况,但对于我试图在同一个线程中服务多个套接字的情况似乎并不令人满意。

考虑类似的东西

对于本练习,假设我实际上有四个客户端连接到那里。似乎从一个线程为它们提供服务的方法类似于

除了这不起作用,因为断开连接的套接字仍然返回nillisten,并且尝试read从没有消息的活动套接字将阻塞但当 wait-for-intput混合中有一个关闭的套接字时立即返回,即使没有其他套接字准备好消息(尽管它似乎没有指定哪些套接字导致它返回)。

在一段时间内没有客户端说话并且第三个客户端断开连接的情况下,似乎没有一种很好的方法可以找出并关闭该特定套接字连接。我必须按顺序阅读它们,除了由于read没有输入的阻塞,这将导致线程等待前两个客户端都发送消息。

我想到的解决方案是(按偏好降序排列),但经过一番确定的谷歌搜索后仍未找到:

  1. 如果对目标流的读取将返回标记,则listen返回与该函数等效的函数。(用这个名义函数替换上面的函数会让它的其余部分按所写的那样工作)tend-of-filelisten
  2. 一个与此等效的函数wait-for-input返回一个导致它跳闸的关闭套接字列表。(在这种情况下,我可以遍历关闭的套接字列表,检查它们是否真的用建议的read技术关闭,并根据需要关闭/弹出它们)
  3. 一个与此等效的函数wait-for-input返回导致它跳闸的第一个关闭的套接字。(与 #2 一样,但速度较慢,因为它每次迭代最多修剪一个非活动连接)
  4. 跟踪我从每个套接字连接收到输入以来的时间,并在一段时间不活动后将其关闭。(无论如何我可能都想做,但是这样做可能会使一堆死连接比必要的时间长得多)
  5. 一个尝试read-char从具有即时超时的流中取出的函数,t如果遇到,则返回:eof,并且unread-chars 其他任何内容(nil在超时或未读取后返回)。(这是最后的手段,因为它似乎很容易以一种不明显但致命的方式破解)

另外,如果我以完全错误的方式思考这个问题,也请指出这一点。

0 投票
1 回答
97 浏览

javascript - 浏览器在函数执行期间停止响应事件,破坏“可拖动”

我有一个有点像这样的滑块:

我正在使用 jQuery UI 使滑块可拖动。这工作正常。

问题是每次滑块越过部分边界(由 表示:)时,我都在执行一个函数。该函数执行大约需要 30 毫秒(它正在构建 DocumentFragment 并将其插入到文档中)。在此期间浏览器不响应事件,因此 jQuery UI 停止调整滑块的位置并且拖动提前结束(用户被迫释放鼠标按钮并开始新的拖动)。这使滑块感觉生涩和错误。

这个问题有解决方案吗?

编辑:我创建了一个简单的小提琴来演示这个问题。请注意,虽然在执行慢速函数期间拖动实际上是暂停的,但它会在之后恢复。这让我怀疑我的更复杂的场景中有一些东西导致拖动事件被缩短(也许 DOM 操作导致滑块的位置短暂改变)。

编辑:经过进一步调查,我更接近于理解这个问题。DOM 操作代码包含类似$('.droppable').remove(). 这会在分离绑定到它们的任何事件处理程序并删除任何关联数据后从 DOM 中删除匹配的元素。如果我.detach()改用,则行为与上面的简单小提琴相同。清理期间发生了一些不愉快的事情。

0 投票
1 回答
1701 浏览

python - 在单线程中运行时龙卷风非阻塞?

Tornado 是非阻塞的网络服务器。

但是,所有操作都在单个线程中运行。如果它由单线程处理,它如何保持非阻塞?

如果有一个长操作,它会阻止新的请求吗?

从 Tornado 下载大文件是一个漫长的阻塞过程吗?

如果我的理解不准确,请纠正我。

非常感谢

0 投票
2 回答
193 浏览

c# - 在 C# 中释放资源

[STAThread]我有一个在 C# 中 运行的程序。

该程序定期创建类 X 的实例并将它们添加到列表中。
一段时间后,这些 X 的实例需要执行的任务都完成了,不再需要该类的实例。
由于我在单个线程上运行,并且这些 X 的许多实例可能同时运行并耗尽资源,即使它们不再需要,我想在我知道 X 的实例完成时释放资源,这样我的程序就不会变慢。

我的代码如下所示:

我想知道是否:

  1. 执行该操作myList.RemoveAt(0)将从内存中删除类 X 的第一个实例的所有跟踪。
  2. 如果有更好的方法来做到这一点。

谢谢!克里斯

0 投票
1 回答
6642 浏览

sql-server - 强制存储过程运行单线程

我有一个在多核系统上运行的存储过程。它以多线程方式执行。由于(可能是)查询中的某些事情,某些线程的执行将永远挂起,并带有 cx_packet 等待和锁定。有没有办法强制单线程执行?(我知道这不是最好的解决方案,但至少在查询得到更好的优化之前很有帮助。)

0 投票
1 回答
999 浏览

.net - 如何正确停止单线程 Windows 服务(onStop)?

我有一个用 VS 2010 / .NET 4.0 编写的 Windows 服务。

该服务遵循以下代码片段的方案:使用计时器,它每几分钟执行一些所需的行为。每隔几分钟执行一次“期望行为”的要求现在已经发展为大约需要 10 秒的工作。

我在该服务中只需要一个线程,没有理由创建多个线程,这就是为什么我将 Windows 服务称为单线程。

我担心的是,如果有人通过管理控制台停止服务,那么服务可能只是在这 10 秒的工作中偶尔执行。

我已经阅读了一些关于 SO 以及如何停止服务的内容,但有点迷失了。有时会创建 WorkerThreads,有时会创建 ManualResetEvents,但到目前为止,我还不能完全掌握 Windows 服务的最佳前进方向。

我在想我需要在 10 秒执行期间检查某种标志,然后只有在该标志没有告诉我应该停止时才继续。在 onStop 方法中,我可能需要等到处理正确完成。

理论就这么多;),但是我最好的前进方式是什么,同时考虑下面的代码片段?

谢谢大家!

0 投票
1 回答
2150 浏览

java - 单线程程序与多线程程序(测量时间)

我想知道我是否需要测量经过的时间,那么这是一个好Single Threaded Program方法还是Multithreading Program一个好的方法。

下面是我的单线程程序,它正在测量我们的服务时间-

我从这个单线程程序得到的输出是 - 总调用是5

这意味着1电话回来了163 ms3电话回来了42 ms等等。

而且我也尝试过使用Multithreaded program来测量经过的时间。意思是用少量线程并行访问服务,然后测量每个线程占用了多少。

下面也是该代码 -

以下是我从上述程序中得到的结果-

一个电话在 176 毫秒内返回,依此类推

所以我的问题是为什么多线程程序比上面的单线程程序要花费更多的时间?如果我的多线程程序中有一些漏洞,谁能帮我改进它?

0 投票
1 回答
2031 浏览

javascript - 如果 Javascript 不是多线程的,是否有任何理由实现异步 Ajax Queuing?

我的 php 服务器有问题(我的电脑是唯一的连接)。我最初认为部分原因是因为 ajax 请求太多(我有一个脚本,每次击键都会执行一个 ajax 请求),所以我实现了一个设计来控制 ajax 请求进入队列的流程。下面是我的代码:

执行:

然后我发现 Javascript 是多线程的,并阅读了一些关于 Javascript 事件处理的文章,例如John Resig在http://ejohn.org/blog/how-javascript-timers-work/上的这篇文章(jQuery extra-ordinaire )

既然如此,难道我在这里介绍的函数不会产生任何结果,因为 Javascript 已经在排队我的请求了吗?奇怪的是,它似乎彻底改变了它。我的服务器崩溃较少,(并不是说它认为它是任何想象中的解决方案......),并且在它崩溃并重新启动后,先前排队的 ajax 请求被发送,而早些时候它们似乎都被一次发送并在服务器崩溃时消失得无影无踪。

如果 Javascript 是单线程的,对异步事件进行排队:

  1. 拥有 Ajax 请求管理器或队列有什么意义?
  2. 为什么我的代码会产生任何结果?
0 投票
3 回答
907 浏览

javascript - 如何在递归中使用 setTimeout 以避免浏览器卡在复杂的进程中

我有这个代码使用一个inefficientProcess()消耗大量内存的代码:

我的目标是使用某种setTimeout(function(){...},0)技术,这样浏览器在执行代码时就不会卡住。

如何更改代码以使其与 setTimeout 一起使用?

我的目标当然是学习如何在执行繁重的计算时避免浏览器崩溃。