【问题标题】:Node.js and threadsNode.js 和线程
【发布时间】:2013-10-21 11:14:04
【问题描述】:

我正在开发一个完全非阻塞的 node.js 应用程序。

不过有一些 CPU 密集型功能:

  • CryptoJS.AES 解密/加密
  • uuid 创建
  • 根据数据创建内容

现在我找到了一个模块来使用线程从 CPU 密集型任务中卸载事件循环: node-webworker-threads

我现在应该创建:

  1. 在应用启动时:每个函数一个线程,因此 AES.decrypt 是一个线程,AES.encrypt 也是如此,等等。
  2. 在应用程序启动时:每个函数都有一个线程池? (多少个线程?每个 CPU 核心 1 个?)
  3. 执行时:每个函数进入一个新线程,完成后销毁?

线程是我还没有完全理解的东西..

【问题讨论】:

  • 您是否对这些函数在没有线程的情况下由 Node 处理的速度进行了基准测试?我的 MBP 每秒可以生成大约 136K (uuid-v4) 到 760K (uuid-v1) UUID,给出一个想法...
  • 未进行基准测试,但我看到了使用线程来完成这些任务的机会。查看您的 MBP 结果,我将不使用线程。也许我稍后会添加它。我已经在使用集群了。感谢罗伯特的评论!

标签: javascript node.js web-worker


【解决方案1】:

这真的取决于您的应用程序。如果使用固定大小的线程池,如果请求数>可用线程数,则必须实现队列,这可能会导致一些拥塞。

最好的方法(当然在我看来)是为每个请求生成一个新线程,处理 AES、UUID 和数据。也就是说,每个请求一个线程来执行所有计算。一切完成后,从线程返回结果并杀死它。

这当然可能会在高负载服务器上产生许多线程;但会让你的事件循环保持清晰。

编辑:This thread 对你来说可能很有趣。

【讨论】:

    猜你喜欢
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    相关资源
    最近更新 更多