waffle
์™€ํ”Œ๊ณต์žฅ
waffle
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (72)
    • ๐Ÿ“’ Daily Log (2)
    • ๐Ÿ”จ Dev_BE (5)
      • ๊ฐœ๋…์ •๋ฆฌ (4)
      • ๊ธฐ๋ก (1)
    • ๐Ÿ”จ Dev_FE (4)
    • ๐Ÿ”จ Dev_DB (1)
    • โš™ Dev_Ops (0)
    • ๐Ÿ”ก Lang (2)
      • Python (2)
    • ๐Ÿ’ก ํ”„๋กœ์ ํŠธ (9)
      • Base (1)
      • ์•„๋Œ€๋ฐ€๋งต (8)
    • ๐Ÿƒ๐Ÿป ์™ธ๋ถ€ํ™œ๋™ (2)
      • [ํ”„๋ฆฌ์ฝ”์Šค] ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค 7๊ธฐ - BE (2)
    • ๐Ÿ“• [STUDY] ๊ฐœ๋ฐœ (13)
      • [STUDY] ์•Œ๊ณ ๋ฆฌ์ฆ˜ (9)
      • ๋™๊ณ„ ์Šคํ„ฐ๋”” [Do-iT: ์›นํŒฉ] (2021) (4)
    • ๐Ÿ“™ [STUDY] AI (2)
      • Tensorflow (2)
    • ๐Ÿ” ๋ณด์•ˆ,์ •๋ณด๋ณดํ˜ธ (32)
      • CTF (2)
      • ๐Ÿ“˜ [STUDY] ํฌ๋ Œ์‹ (15)
      • ๐Ÿ“˜ [STUDY] ์ทจ์•ฝ์  (4)
      • ๐Ÿ“˜ [STYDY] ๋ฆฌ๋ฒ„์‹ฑ (11)
    • ๐Ÿ“” IT ๋ฒ•๋ฅ  (0)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • Weekly
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • scrum
  • ์šฐํ…Œ์ฝ”_7๊ธฐ
  • ์ฝ”๋”ฉํ…Œ์ŠคํŠธ_๊ณ ๋“์ 
  • sql
  • ์ˆ˜ํ•™_1(์—ฐ์Šต)
  • ์•„์ฃผ๋Œ€_์•Œ๊ณ ๋ฆฌ์ฆ˜_๊ต์œก
  • ๋ฌธ์ž์—ด
  • ์šฐํ…Œ์ฝ”
  • til
  • ๊ฐœ๋ฐœ
  • ์ˆ˜ํ•™_1
  • ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค
  • ํ”„๋ฆฌ์ฝ”์Šค
  • ์—ฐ์Šต_์ž๋ฃŒ๊ตฌ์กฐ
  • ์ž๋ฃŒ๊ตฌ์กฐ
  • reversing
  • ๋ฐ์ผ๋ฆฌ์•Œ๊ณ 
  • js
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
  • gdb
  • ๋ฐฑ์ค€
  • dopwn
  • API
  • JAVA_API
  • Java
  • javascript
  • write-up
  • ๊ฐœ๋ฐœ๋ฐฑ์„œ

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
waffle

์™€ํ”Œ๊ณต์žฅ

๐Ÿ”จ Dev_FE

[ vanilla js ] Web Worker API (๊ฐœ๋…ํŽธ)

2021. 7. 20. 10:25
728x90

*Reference:

 

https://developer.mozilla.org/ko/docs/Web/API/Web_Workers_API

 

Web Workers API - Web API | MDN

์›น ์›Œ์ปค(Web worker)๋Š” ์Šคํฌ๋ฆฝํŠธ ์—ฐ์‚ฐ์„ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฃผ ์‹คํ–‰ ์Šค๋ ˆ๋“œ์™€ ๋ถ„๋ฆฌ๋œ ๋ณ„๋„์˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ์›น ์›Œ์ปค๋ฅผ ํ†ตํ•ด ๋ฌด๊ฑฐ์šด ์ž‘์—…์„ ๋ถ„๋ฆฌ๋œ ์Šค๋ ˆ๋“œ์—์„œ

developer.mozilla.org


Web Worker API

์›นํŽ˜์ด์ง€์—์„œ ์‹คํ–‰์ค‘์ธ ์ฃผ ์Šค๋ ˆ๋“œ์™€ ๋ณ„๊ฐœ์˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ 

๋ณ„๊ฐœ์˜ ์Šค๋ ˆ๋“œ์—์„œ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๋ฌด๊ฑฐ์šด ์ž‘์—…์œผ๋กœ ์ธํ•œ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋‹ ์ง€์—ฐ ๋“ฑ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Œ.

 

*์ฃผ์˜

 

1) window์˜ ์ผ๋ถ€ ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ ๋ถˆ๊ฐ€ (https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Functions_and_classes_available_to_workers)

2) DOM์„ ์›Œ์ปค ๋‚ด์—์„œ ์ง์ ‘ ์กฐ์ž‘ ๋ถˆ๊ฐ€

 

 

์‚ฌ์šฉ

 

์›Œ์ปค์˜ ์ข…๋ฅ˜๋Š” 2๊ฐ€์ง€๋กœ ๋‚˜๋‰˜์–ด์ง‘๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์›Œ์ปค๊ฐ€ ํ•˜๋‚˜์˜ ์Šคํฌ๋ฆฝํŠธ์—์„œ๋งŒ ์“ฐ์ธ๋‹ค๋ฉด, ์ „์šฉ์›Œ์ปค๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ „์šฉ์›Œ์ปค๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์˜ํ•ฉ๋‹ˆ๋‹ค:

const myWorker = new Worker(workerRoute)

 

๋งŒ์•ฝ ์›Œ์ปค๊ฐ€ ํ•˜๋‚˜์˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์•„๋‹Œ 2๊ฐœ ์ด์ƒ์˜ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์“ฐ์ธ๋‹ค๋ฉด, ๊ณต์œ ์›Œ์ปค๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๊ณต์œ ์›Œ์ปค๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์˜ํ•ฉ๋‹ˆ๋‹ค:

const myWorker = new SharedWorker(workerRoute)

 

 

1. ์ „์šฉ์›Œ์ปค: ๋ฉ”์ธ-์›Œ์ปค๊ฐ„ ํ†ต์‹ 

* ํŽธ์˜๋ฅผ ์œ„ํ•ด ์›Œ์ปค๊ฐ€ ์›Œ์ปค๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š์Œ. ์›Œ์ปค๊ฐ€ ์›Œ์ปค๋ฅผ ํ˜ธ์ถœํ•˜๋Š”๊ฒฝ์šฐ, ์Šค๋ ˆ๋“œ๊ฐ„ ์ดํ•ด๊ด€๊ณ„๊ฐ€ ๋ฉ”์ธ์Šค๋ ˆ๋“œ์—์„œ ๋ถ€๋ชจ์Šค๋ ˆ๋“œ๋กœ ์น˜ํ™˜๋จ.

 

์ „์šฉ์›Œ์ปค์—์„œ ๋ฉ”์„ธ์ง€๋ฅผ ์ „์†กํ• ๋•Œ๋Š” postMessage() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๊ฐ’์„ ์—ฌ๋Ÿฌ๊ฐœ ๋ณด๋‚ธ๋‹ค๋ฉด, ๋ฐฐ์—ด๋กœ ๋ณด๋‚ด์•ผํ•ฉ๋‹ˆ๋‹ค.

myWorker.postMessage(values)

 

 

 

๋ณด๋‚ธ ๋ฉ”์„ธ์ง€๋ฅผ ์›Œ์ปค ์•ˆ์—์„œ ๋ฐ›๊ธฐ ์œ„ํ•ด์„œ๋Š” onmessage๋ฅผ ํ†ตํ•ด ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋“ฑ๋กํ•˜๊ณ , ํ•ธ๋“ค๋Ÿฌ ์•ˆ์˜ e.data์—์„œ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

onmessage = function(e) {
	const { data } = e;
}

 

๋ฐ˜๋Œ€๋กœ ์›Œ์ปค์—์„œ ๋ฉ”์ธ์Šค๋ ˆ๋“œ๋กœ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ผ๋•Œ๋„ postMessage() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

postMessage(message);

 

 

๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์›Œ์ปค์˜ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ›์„ ๋•Œ๋Š” myWorker.onmessage์— ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋“ฑ๋กํ•˜์—ฌ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์„ธ์ง€๋Š” ๋™์ผํ•˜๊ฒŒ e.data์— ์žˆ์Šต๋‹ˆ๋‹ค.

 

myWorker.onmessage = function(e) {
	const { data } = e;
}

 

 

 

2. ์ „์šฉ์›Œ์ปค: ์›Œ์ปค ์‚ญ์ œ

 

๋ฉ”์ธ์Šค๋ ˆ๋“œ์—์„œ ์›Œ์ปค๋ฅผ ์‚ญ์ œํ• ๋•Œ๋Š” worker.terminate() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

myWorker.terminate();

 

์›Œ์ปค ์•ˆ์—์„œ ์ž๊ธฐ ์ž์‹ ์„ ์‚ญ์ œํ•  ๋•Œ๋Š” close() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

close();

 

 

3. ๊ณต์œ ์›Œ์ปค: ์›Œ์ปค๊ฐ„ ํ†ต์‹ 

* ์—ฌ๊ธฐ๋ถ€ํ„ฐ๋Š” ๋ถ€๋ชจ-์ž์‹ ์Šค๋ ˆ๋“œ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

 

๊ณต์œ ์›Œ์ปค๋Š” ์ „์šฉ์›Œ์ปค์™€ ๋‹ฌ๋ฆฌ ํ†ต์‹ ์„ ์œ„ํ•ด port ๊ฐ์ฒด๋ฅผ ํ†ต๊ณผํ•ด์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค. port์˜ ์—ฐ๊ฒฐ์€ start() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์‹œ์ž‘๋˜๋ฉฐ, ๋ฐ˜๋“œ์‹œ ์šฐ์„  ์‹คํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ๋ชจ๋“  ํ˜ธ์ถœ์„ port ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœํ•˜๋ฉฐ, ์ด๊ฒƒ ์ด์™ธ์— ๋‹ค๋ฅธ์ ์€ ์—†์Šต๋‹ˆ๋‹ค. 

๊ฐ€๋ น ์ „์šฉ์›Œ์ปค์—์„œ onmessage๋กœ ์‚ฌ์šฉ๋˜์—ˆ๋˜ ๊ฒƒ์€ port.onmessage๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ์ ์šฉ์‚ฌํ•ญ์€ ๋ถ€๋ชจ์Šค๋ ˆ๋“œ์™€ ์ž์‹์Šค๋ ˆ๋“œ์— ๋ชจ๋‘ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

 


 

port์˜ ์—ฐ๊ฒฐ์€ 2๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ onmessage ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ†ตํ•ด ์ด ์›Œ์ปค๊ฐ€ ์‹คํ–‰๋œ๋‹ค๋ฉด ์—ฐ๊ฒฐ์€ ์•”๋ฌต์ ์œผ๋กœ ์‹œ์ž‘๋˜๊ธฐ๋•Œ๋ฌธ์— ๋”์ด์ƒ ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋งŒ์•ฝ addEventListener() ๋ฉ”์†Œ๋“œ์™€ ์—ฐ๊ด€๋˜์–ด ๋ฉ”์„ธ์ง€ ์ด๋ฒคํŠธ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค๋ฉด start() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐ์„ ์ฒ˜๋ฆฌํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

start() ๋ฉ”์†Œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:

 

๋ถ€๋ชจ ์Šค๋ ˆ๋“œ์—์„œ:

myWorker.port.start();

 

์ž์‹ ์Šค๋ ˆ๋“œ์—์„œ (=์›Œ์ปค ์•ˆ์—์„œ):

port.start();

 

 

728x90
๋ฐ˜์‘ํ˜•

'๐Ÿ”จ Dev_FE' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ CSS ] CSS ๋ชจ๋ฐ”์ผ Transition ๊ฐœ์„   (0) 2022.02.13
[ JS ] ๋ฌธ์ž์—ด๋‚ด์˜ ํŠน์ • ๋ฌธ์ž์—ด ๋ชจ๋‘ ๋Œ€์น˜ํ•˜๊ธฐ  (0) 2022.01.25
[ JS ] 1. ์ปดํŒŒ์ผ  (0) 2021.08.28
    '๐Ÿ”จ Dev_FE' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [ CSS ] CSS ๋ชจ๋ฐ”์ผ Transition ๊ฐœ์„ 
    • [ JS ] ๋ฌธ์ž์—ด๋‚ด์˜ ํŠน์ • ๋ฌธ์ž์—ด ๋ชจ๋‘ ๋Œ€์น˜ํ•˜๊ธฐ
    • [ JS ] 1. ์ปดํŒŒ์ผ
    waffle
    waffle
    ๊ฐœ๋ฐœ๊ธฐ์ˆ  ๊ด€๋ จ ๊ธ€๋“ค์€ velog์— ์žˆ์Šต๋‹ˆ๋‹ค :) (https://velog.io/@cm_waffle) Developer waffle = new Waffle();

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”