Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 匹配用户流节点_Javascript_Node.js_Multithreading_Express - Fatal编程技术网

Javascript 匹配用户流节点

Javascript 匹配用户流节点,javascript,node.js,multithreading,express,Javascript,Node.js,Multithreading,Express,所以我试图创建一个系统,用户可以通过特定信息相互匹配, 我心目中的流程如下: 用户1填写信息并单击“查找” 同时,用户2执行与用户1相同的操作 客户端以route/X向服务器发送请求,以便服务器可以将客户端推送到(线程安全)队列 每次都有一个工作线程从队列中抽出并进行匹配 同时,用户在服务器中轮询route/Y以获得匹配 工作线程找到2个匹配的用户并将其推送到某个(线程安全的)数据结构 下次用户轮询服务器时(in/Y),用户将获得匹配项并重定向到对话 那么首先,这是一个好方法吗? 还有在java

所以我试图创建一个系统,用户可以通过特定信息相互匹配, 我心目中的流程如下:

  • 用户1填写信息并单击“查找”
  • 同时,用户2执行与用户1相同的操作
  • 客户端以route/X向服务器发送请求,以便服务器可以将客户端推送到(线程安全)队列
  • 每次都有一个工作线程从队列中抽出并进行匹配
  • 同时,用户在服务器中轮询route/Y以获得匹配
  • 工作线程找到2个匹配的用户并将其推送到某个(线程安全的)数据结构
  • 下次用户轮询服务器时(in/Y),用户将获得匹配项并重定向到对话
  • 那么首先,这是一个好方法吗? 还有在javascript中使用工作线程和线程安全数据结构的逻辑吗?(特别是Nodejs和express)有没有其他或更好的方法来做这类事情


    谢谢。

    这是一个糟糕的方法

    您的用例不需要(也不应该使用)工作线程

    在工作线程上 工作线程是作为独立线程运行的Javascript的独立实例。它们严格用于执行CPU密集型工作

    vs香草节点 但您不需要它们,因为节点库是异步的,这意味着,除非您的代码确实是CPU密集型的,否则您将看不到使用工作线程的任何好处(事实上,使用工作线程会有开销,因此如果不需要,您的代码将运行得更慢)

    来自:“worker(线程)对于执行CPU密集型JavaScript操作非常有用。它们对I/O密集型工作没有多大帮助。Node.js的内置异步I/O操作比worker更高效。”

    更多关于线程的信息 Javascript是单线程的,并且以这种方式工作得非常好。Javascript中没有“线程安全”的概念,因为不需要它;所有代码都是线程安全的

    如果你有CPU密集型代码 如果您正在进行昂贵的正则表达式匹配,那么您希望并行运行此代码是正确的。不过,工作线程可能不是实现这一点的最佳方式

    将CPU密集型代码拆分为单独的程序通常是最灵活的解决方案。它为您提供了几个选项:

  • 生成节点的新实例运行CPU密集型代码(在同一台服务器上)
  • 在云中的“无服务器”服务(如AWS Lambda)上运行CPU密集型代码
  • 将CPU密集型代码转换为“微服务”,本质上是一个小型Web服务器,它执行任何专门处理并返回结果
  • 进一步阅读 节点的异步性如何工作(大图)

    什么类型的操作会阻止事件循环以及如何避免它

    好吧,但如何才能实现这种行为呢?我已经习惯了c/c++多线程的概念。我需要有一个后台流程,不断地进行匹配。无论用户何时发送请求(从池中选择一个匹配的用户并将其返回),只匹配用户是否更好?@someone“匹配”到底是做什么的?我需要关于这一步的更多信息。例如,你进入网站,填写一些关于你自己的信息,然后按下“查找”按钮,然后网站将你与另一个同时也在寻找另一个人的人进行匹配。然后你们可以一起聊天。和omegle/聊天一样roullete@someone这听起来像是由数据库支持的,在这种情况下,您仍然应该只使用异步调用来获得最大性能。即使您在内部使用数据结构处理它,它听起来也不是CPU密集型的,所以您应该继续使用异步工作流。当然,在C/C++中,需要有一个单独的线程/进程,但在节点中不需要。所有内容本质上都在一个事件循环中,因此您可以并行处理web请求并进行额外的工作。这种功能是现成的express@someone对的无需并发,无需抢占代码,也无需担心同步问题。