【问题标题】:Is it possible to write Sync blocking IO in pure Javascript (nodejs) without c code?是否可以在没有 c 代码的情况下用纯 Javascript (nodejs) 编写同步阻塞 IO?
【发布时间】:2012-09-26 01:38:35
【问题描述】:
  1. Javascript 在设计上是不鼓励或不允许同步阻塞 IO 吗?
  2. 为什么 Javascript 中没有 sleep API?是不是因为以上几点?
  3. 浏览器可以有多个执行 javascript 的单线程吗?为什么总是单线程?

以上几点(由于浏览器限制)是否使 javascript 成为服务器端非阻塞语言的理想语言?

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    浏览器只会在一个线程中运行 Javascript(至少每个域,Web Worker 除外)。
    这主要是为了简单;直到最近,还没有人为 Javascript 编写线程 API。

    为了使浏览器更易于编写(更快),这个线程是浏览器 UI 线程。因此,Javascript 中的任何同步工作(或睡眠调用)都会冻结浏览器。
    这就是强烈反对同步操作的原因。

    【讨论】:

    • @josh3736:这不一定是真的。如果你调用window.open(),新窗口必须共享你的UI线程。
    • That's true,但这只是因为 JS 允许打开的窗口保留对打开的窗口内部的引用(因此,必须共享一个线程)。 打开的页面所在的域无关紧要。此外,如果您在两个窗口中打开小提琴的两个副本并阻止其中一个,则另一个不受影响(即使它们在同一个域)。
    猜你喜欢
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多