标签: single-threaded

为什么setTimeout没有取消我的循环?

我想知道JavaScript while语句(在Chrome控制台中)可以在几毫秒内递增一个变量多少次,所以我很快将这个片段直接写入控制台:

var run = true, i = 0;
setTimeout(function(){ run = false; }, 1);
while(run){ i++; }
Run Code Online (Sandbox Code Playgroud)

问题是它会永远运行.
为什么会发生这种情况,我该如何解决?

javascript infinite-loop single-threaded

75
推荐指数
3
解决办法
3234
查看次数

单线程单元 - 无法实例化ActiveX控件

我需要在HTML页面中获取有关应用的CSS样式的信息.我使用AxWebBrowser并迭代IHTMLDOMNode.我能够获得所需的所有数据并将代码移动到我的应用程序中.问题是这部分是在后台worker中运行的,我在尝试实例化控件时遇到异常.

AxWebBrowser browser = new AxWebBrowser();

ActiveX control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot be instantiated
because the current thread is not in a single-threaded apartment.
Run Code Online (Sandbox Code Playgroud)

有什么方法可以解决这个或其他选项而不是AxWebBrowser?

.net exception sta single-threaded

63
推荐指数
2
解决办法
10万
查看次数

如果在ajax调用期间显示警报窗口会发生什么?

我只是想知道如果在执行ajax调用时,在浏览器窗口中向用户提示警报会发生什么.

比如说,我有一个ajax调用

$.ajax({
    url: ...,
    type: GET/POST,
    ...
    success: function(data){
        console.log(data);
    },
    error: ...
});
Run Code Online (Sandbox Code Playgroud)

这需要很长时间才能完成(10秒).在执行调用时,会抛出一个简单的javascript警报

alert("hello!");
Run Code Online (Sandbox Code Playgroud)

例如,如果:

  1. ajax呼叫开始
  2. ajax调用获取数据
  3. 警报显示
  4. ajax调用返回数据(警报窗口仍然打开!)

知道JS是单线程的我知道脚本执行将停止,我只是想知道如果警报窗口没有"及时"关闭,ajax调用/响应会发生什么.

我希望我足够清楚,这不是一个"虚假"的问题.谢谢

javascript ajax single-threaded

52
推荐指数
2
解决办法
3076
查看次数

如何连接事件循环,回调队列和Javascript的单线程?

一般目标

我想知道以下javascript环境如何作为系统互连.

  • Javascript引擎
  • 事件循环
  • 事件队列

我们可以将此限制为浏览器环境,因为节点已在另一篇文章中介绍(此处)

我(相信)理解的事情:

  • Javascript是单线程的,因此只有一个callstack.

  • Javascript环境只提供一些真正异步的函数.这些可能包括setTimeout(),setInterval()和I/O函数.

  • 如果不使用其中一个,开发人员就无法创建自己的异步函数.
  • Javascript本身同步运行,但通过它的异步函数可以在当前的callstack清除后回调可能的阻塞函数.

例:

      console.log(‘Sync code started…’);

      setTimeout(function asyncLog() {
           console.log(‘Async function has completed’)
      }, 2000);

      console.log(‘Sync code finished…')
Run Code Online (Sandbox Code Playgroud)

示例步骤:

(如果我错了,请纠正步骤)

  1. 记录"同步代码已启动..."
  2. setTimeout被添加到堆栈但立即返回控件
  3. setTimeout被发送到另一个'thread'...'worker'?在javascript的单线程之外计算2000毫秒
  4. 记录"同步代码已完成..."
  5. 在2000毫秒之后,asyncLog()被推送到事件队列
  6. 由于callstack已清除,因此Event Loop会检查事件队列是否有待处理的回调
  7. asyncLog()从队列中删除,并由事件循环推送到堆栈
  8. 记录了"异步功能已完成"
  9. callstack现在很清楚了

质询

如果有人可以概述async函数(例如setTimeout)从第一次访问callstack到回调到callstack的时间和位置的步骤的概述,则不需要逐个回答这些步骤.

  1. 在第3步,谁产生这个新线程?是浏览器吗?
    • 这个新线程被阻止正确吗?
    • 如果你有一个创建1000 setTimeouts的循环会发生什么.是否创建了1000个"线程"?
    • 一次可以生成多少个线程是否有限制?
    • 当新线程完成执行时,它如何最终在队列中?
  2. 谁提供了事件队列?
  3. 谁提供事件循环?
    • 事件循环是否轮询事件队列?
    • javascript的线程是否知道事件循环?或者Event循环只是把东西推到堆栈上?
    • 事件循环如何知道堆栈何时清除?

javascript asynchronous event-loop event-queue single-threaded

20
推荐指数
1
解决办法
5742
查看次数

Node.js服务器有多个并发请求,它是如何工作的?

我知道node.js是一个单线程,异步,非阻塞的i/o.我已经阅读了很多相关内容.例如,PHP每个请求使用一个线程,但节点只使用一个线程,就像那样.

假设在node.js服务器上有三个请求a,b,c同时到达.其中三个请求需要大量阻塞操作,例如,他们都想读取相同的大文件.

那么请求如何排队,执行阻塞操作的顺序以及调度响应的顺序是什么?当然使用了多少线程?

请告诉我三个请求的请求到响应的顺序.

nonblocking single-threaded node.js

17
推荐指数
1
解决办法
6977
查看次数

单核处理器上的单线程与多线程编程

有人可以解释一下,编写一个运行在单核处理器上的多线程代码是否有任何优势?例如,一种处理文档页面的方法,使得页面与上述代码段相互排斥.

乍一看,似乎没有优势,因为真正的多线程是不可能的.即,OS无论如何都必须上下文切换线程.我想知道是否只是以单线程方式编写代码实际上可能更有效.

显然,有很多情况下编写多线程代码是有意义的,但同样,我的问题是当应用程序在单核处理器上运行时是否真的有这样做的优势.

编辑:请注意,我没有说"应用程序"而是"代码段" - 请看上面的示例.显然,拥有一个多线程应用程序是有好处的.

multithreading processor single-threaded

15
推荐指数
2
解决办法
2万
查看次数

Windows服务OnStop等待完成处理

我实际上在VS 2012/.NET 4.5中开发了一个Windows服务.

该服务遵循以下代码段的方案:

  • 使用计时器
  • 每隔几分钟执行一些所需的操作.
  • 该过程大约需要10分钟才能完成
  • 我在服务中使用单个线程

我担心的是,如果有人通过管理控制台停止服务,它可能只是在服务正在进行的过程中.

我已经做了一些关于停止请求停止的Windows服务的阅读,但有点迷失.有时创建WorkerThreads,有时会创建ManualResetEvents,但到目前为止,我无法完全掌握Windows服务的最佳前进方法.

我需要等到处理在onStop方法中正确完成后再停止Windows服务.

那么最好的方法是什么,还要考虑下面的代码片段?

谢谢大家!

namespace ImportationCV
{
    public partial class ImportationCV : ServiceBase
    {
        private System.Timers.Timer _oTimer;       

        public ImportationCV()
        {
            InitializeComponent();

            if (!EventLog.SourceExists(DAL.Utilities.Constants.LOG_JOURNAL))
            {
                EventLog.CreateEventSource(DAL.Utilities.Constants.LOG_JOURNAL,     DAL.Utilities.Constants.SOURCE_JOURNAL);
            }

            EventLog.Source = DAL.Utilities.Constants.SOURCE_JOURNAL;
            EventLog.Log = DAL.Utilities.Constants.LOG_JOURNAL;
        }

        protected override void OnStart(string[] args)
        {            
            int intDelai = Properties.Settings.Default.WatchDelay * 1000;

            _oTimer = new System.Timers.Timer(intDelai);
            _oTimer.Elapsed += new ElapsedEventHandler(this.Execute);

            _oTimer.Start();           

            EventLog.WriteEntry(DAL.Utilities.Constants.LOG_JOURNAL, "Service " + DAL.Utilities.Constants.SERVICE_TITLE + " started at " + DateTime.Now.ToString("HH:mm:ss"), EventLogEntryType.Information);
        }

        protected override …
Run Code Online (Sandbox Code Playgroud)

.net c# wcf windows-services single-threaded

14
推荐指数
1
解决办法
2万
查看次数

Nodejs回调机制 - 哪个线程处理回调?

我是nodeJS的新手,并且想知道Node的单实例模型.在一个简单的nodeJs应用程序中,当使用回调异步处理某些阻塞操作时,运行nodeJs的主线程是否也处理回调?如果请求是从数据库中获取一些数据,并且有100个并发用户,并且每个db操作需要几秒钟,当最终触发回调时(对于每个连接),主线程是否接受这些请求用于执行回调?如果是这样,nodeJs如何扩展以及它如何快速响应?

asynchronous scalability callback single-threaded node.js

9
推荐指数
1
解决办法
2825
查看次数

从Sun Grid Engine上使用qsub提交的进程获取退出代码

我想通过qsub在Sun Grid Engine上提交作业(现在:Oracle Grid Engine?).我不希望使用-sync yes选项或qrsh,因为我希望我的控制程序是单线程的,并且能够一次启动多个作业.这些选项会阻止我的控制程序的线程.

但是,我想收到我发布的进程的退出状态.从手册页中,似乎无法在不阻塞我的线程的情况下获取此代码.如果没有修改我正在启动的作业以将其退出代码打印到stdout,是否有任何方法可以获得此状态?

exit-code qsub single-threaded sungridengine

8
推荐指数
1
解决办法
4466
查看次数

什么时候不在Java中使用数据库连接池?

我可以找到很多关于如何使用连接池的问题以及为什么这是一个好主意,但我想知道我是否真的需要它.

我正在创建一个服务器应用程序,虽然它是多线程的,但我一直小心,只有一个线程可以访问我的数据库连接.

那么使用连接池有什么意义吗?

我不能只在生命周期开始时打开与数据库的连接并永远使用那个连接,或者如果长时间处于非活动状态,它会超时吗?

我绝对close()我连接上我用它做什么之后呢,还是足够的通话close()ResultSet和/或Statement

java database pool jdbc single-threaded

8
推荐指数
1
解决办法
2781
查看次数