1)多线程非常困难,不幸的是,到目前为止,您提出这种想法的方式意味着您严重低估了它的难度。
目前,这听起来像是您只是在向该语言“添加线程”,而后又担心如何使其正确和高效。尤其是:
如果两个任务尝试同时访问变量,则该变量将被标记为atomic,并且它们争用访问。
...
我同意原子变量不能解决所有问题,但是致力于解决同步问题是我的下一个目标。
在没有“同步问题解决方案”的情况下向Javascript添加线程就像在没有“解决附加问题的解决方案”的情况下向Javascript添加整数。这对于问题的本质是如此重要,以至于根本就没有必要讨论没有考虑特定解决方案的情况下是否值得添加多线程,无论我们多么想要它。
另外,使所有变量原子化是一种可能使多线程程序的性能比单线程程序差的事情,这使得在更实际的程序上实际测试性能并查看是否获得任何东西变得更加重要。
对我来说,还不清楚您是要使线程对node.js程序员隐藏还是打算在某个时候公开它们,从而有效地为多线程编程创建新的Java语言方言。这两个选项都可能很有趣,但是听起来您甚至还没有决定要瞄准哪个。
因此,目前,您正在要求程序员考虑从单线程环境切换到全新的多线程环境,该环境没有解决同步问题的方法,也没有证据表明它可以改善实际性能,并且似乎没有解决这些问题的计划。
这可能就是为什么人们没有认真对待您的原因。
2)单事件循环的简单性和鲁棒性是一个巨大的优势。
Javascript程序员知道Java语言在竞争条件和其他困扰所有真正的多线程编程的极其隐蔽的错误中是“安全的”。他们需要强有力的论据来说服他们放弃安全性,这一事实并不能使他们胸襟开阔,而是让他们负责任。
除非您能以某种方式保持这种安全性,否则任何想切换到多线程node.js的人都可能会改用像Go这样为多线程应用程序专门设计的语言。
3)Javascript已经支持“后台线程”(WebWorkers)和异步编程,而没有直接向程序员公开线程管理。
这些功能已经解决了影响现实世界中Javascript程序员的许多常见用例,而没有放弃单个事件循环的安全性。
您是否牢记这些功能无法解决的特定用例,并且Javascript程序员想要解决方案?如果是这样,最好在该特定用例的上下文中显示您的多线程node.js。
PS:什么能说服我尝试切换到多线程node.js实现?
用Javascript / node.js编写一个简单的程序,您认为它将受益于真正的多线程。在正常节点和多线程节点上的此示例程序上进行性能测试。向我展示,您的版本在很大程度上引入了运行时性能,响应速度和多个内核的使用,而没有引入任何错误或不稳定。
完成此操作后,我认为您会看到人们对该想法更感兴趣。