카테고리 없음

Worker Thread를 공부하다가...

코딩루이지 2023. 7. 21. 02:36

Worker Thread

Worker Thread

 

Worker threads | Node.js v18.17.0 Documentation

Worker threads# Source Code: lib/worker_threads.js The node:worker_threads module enables the use of threads that execute JavaScript in parallel. To access it: const worker = require('node:worker_threads'); copy Workers (threads) are useful for performing

nodejs.org

The node:worker_threads module enables the use of threads that execute JavaScript in parallel.

 

Actor model

 

Actor model - Wikipedia

From Wikipedia, the free encyclopedia Model of concurrent computation The actor model in computer science is a mathematical model of concurrent computation that treats an actor as the basic building block of concurrent computation. In response to a message

en.wikipedia.org

행위자 모델 또는 액터모델(actor model)


컴퓨터 과학에서 행위자를 병행 연산의 범용적 기본 단위로 취급하는 병행 컴퓨팅의 수학적 모델이다.


행위자가 받는 메시지에 대응하여, 행위자는 자체적인 결정을 하고 더 많은 행위자를 만들며, 더 많은 메시지를 보내고, 다음에 받을 메시지에 대한 응답 행위를 결정할 수 있다.


행위자는 개인 상태를 수정할 수 있지만, 메시지를 통해서만 서로에게 영향을 줄 수 있다. (락의 필요성을 제거함)

 

공부하면서 알게 되었는데 Worker Thread는 Actor model을 구현한게 아닌가 라는 생각이 들었다.

 


 

worker thread... 좋은 모델인가?

 

worker thread는 개개인의 프로세스(운영체제읜 프로세스 아님)을 가지고있다.

 

개별적으로 힙공간도 가지고 있고 마치 멀티 프로세스 프로그래밍이랑 유사한점이 매우 많다.

  • 첫째, 공유변수가 없다
    공유변수가 없고 메세지나 데이터를 주고받을때 데이터를 복사해서 준다고한다.
    이 말은 내가 객체를 넘겨주고 넘겨받은 객체를 변환해도 원래 객체의 복사본이라는 것이다.
  • 개별적인 프로세스를 가진다

공유변수는 없지만, 메세지를 통해 데이터를 주고받을 수 있고 오히려 공유변수가 없다는점에서

 

race condition이 발생하지 않으니까 당연히 데드락이 일어나지 않는다는 무지막지한 장점이 있다.

 

하지만, 공유 변수가 없어 데이터를 주고받을때 데이터를 복사해서 전달해준다.

 

만일 그 데이터가 대용량 데이터였다면....? 데이터가 2배로 뻥튀기 된다는것이다.

 

메모리 낭비가 되는데.... 이게 좋은걸까?

 

아마 해답은 설계에 있지 않을까 싶다.

 

deadlock이 일어나지 않는다는것은 엄청난 강점이다.

 

특히 대규모 트래픽이 일어나는 프로그램에서는 디버깅도 쉽지 않은 것을 원초적으로 차단해주니까.

 

대신 발생할 수 있는 메모리 낭비는 대용량 데이터를 주고받지 않도록 위 actor model로 잘 설계해야 한다.

 

메세지 데이터를 최소화 시킨다는것이다.

 

이는 돌고돌아 함수형 프로그래밍이랑 비슷한 맥락을 가진다.

 

함수는 state를 가지지 않고 외부값을 참조하면 안되고 외부값을 바꾸면 안된다.

 

하나의 actor, worker가 함수형 프로그램처럼 짜여지면 주고받을 메세지가 거의 없다싶이 할테니

 

actor model 함수형 프로그램에 잘 어울리는 모델이 아닌가 생각이 들지만,

 

actor은 하나의 완전한 객체이다 라는 말도 있다.

 

내가 내린 결론은 내가 객체지향이든, 함수형이든 어떤 패러다임을 지원하는 언어로 코드를 작성을 하던지

 

이런 지향점들을 모두 고려하며 코드를 작성하는 사람이 되어야 겠다는 생각이 들었다.