GET 매개 변수를 디코딩하고 인코딩 된 형식으로 데이터를 반환하는 웹 서버에 nodejs를 사용하고 있습니다. decode/encode는 nodejs의 crypto 모듈을 사용하여 수행됩니다. 단일 요청을 처리하는 데 소요되는 시간이 충분히 빠르지 만 이벤트 루프를 차단하면 서비스가 동시성이 떨어지게됩니다.nodejs에서 CPU 바운드 작업을 구현하는 방법
내 요구 사항은 간단합니다. 이벤트 루프 외부에서 인코딩/디코딩 기능을 사용하십시오.
- 별도의 프로세스 (child_process 또는 클러스터)
이 유일하게이 목적을 위해 별도의 프로세스가 될 수 있습니다,하지만 인코딩 이후/디코드는 자식 프로세스에서 차단 될이 자식 프로세스를 중지합니다 새로운 메시지를받습니다. 즉, 자식 프로세스가 단일 스레드 일 때 두 문자열이 인코딩 될 때 절대로 상황이 발생하지 않습니다.
-
각 요청
- 별도의 스레드 (스레드-A-고골 또는 섬유 또는 노드 webworker)
에서, 인코딩/디코딩 동작을 수행하는 각각의 요청을위한 별도의 쓰레드를 생성하지만 없음 모듈이 예상대로 작동하는 것처럼 보입니다. 즉, threads-a-gogo가 npm을 통해 설치되지 않고 fiber가 run(), node-webworker not working에 개별 스레드를 생성하지 않았습니다.
누군가 비슷한 문제가 있거나 간단한 메시지 전달을 사용하여 nodejs에서 스레드를 쉽게 만들 수있는 방법이 있습니까?
: 클러스터와
http://nodejs.org/api/cluster.html#cluster_cluster_fork_env
, 그것은 뭔가를 작동합니다 귀하의 블로킹/액티브 대기를 패시브 이벤트 기반 스타일로 바꾸는 것 – ControlAltDel
나는 CPU가 바운드 작업과 노드가 잘 맞지 않는다고 생각합니다. 그렇다면 예를 들어 Java를 사용하는 것이 더 좋으며 node/java가 효과적으로 통신 할 수 있습니다. – Alfred
nodejs의 CPU 바운드 작업이 끔찍하다는 것을 알고 있기 때문에 내장 된 암호화 모듈이이를 별도로 처리 할 것으로 예상됩니다. 하지만 Java/C에서 중계하는 것 외에 다른 옵션이 없습니까? – mdprasadeng