>  기사  >  웹 프론트엔드  >  node.js의 이벤트 루프(EventLoop)에 대한 자세한 소개(코드 포함)

node.js의 이벤트 루프(EventLoop)에 대한 자세한 소개(코드 포함)

不言
不言원래의
2018-08-20 09:53:221501검색

이 기사는 js의 이벤트 루프(EventLoop)에 대한 자세한 소개를 제공합니다. 이는 특정 참고 가치가 있으므로 도움이 될 수 있습니다.

머리말

이벤트루프를 배우기 전에 js의 단일 스레드와 비동기성에 대해 검토해야 합니다.
js는 단일 스레드이지만 브라우저와 Node.js에서는 그에 맞게 처리되었습니다. 브라우저의 웹 작업자(작업자 스레드)와 Node.js의 child_process(하위 프로세스) 등이 있습니다. 이들의 출현은 많은 양의 계산을 분해하는 것을 촉진했습니다.

Event Loop

프로세스가 시작되면 노드는 내부 관찰자를 사용하여 필요한 이벤트가 있는지 확인합니다. , 이벤트가 있는 경우 해당 이벤트 및 관련 콜백 함수를 꺼내 실행한 후 더 이상 없는 경우 프로세스를 종료합니다.

브라우저의 이벤트루프

메인 스레드 UI 렌더링을 차단하지 않도록 브라우저의 작업자 스레드에 비동기 이벤트를 배치합니다

# 🎜 🎜#
  console.log('进程开始')
  const ajax = new XMLHttpRequest()
  ajax.addEventListener('load', () => {
    console.log('load')
  })
  ajax.addEventListener('loadend', () => {
    if (ajax.readyState == 4 && ajax.status == 200) {
      console.log('ajax success')
      } else {
      console.log('ajax success')
      }
  })
  ajax.open('get', 'http://localhost/study/html/vue.js')
  ajax.send()
  setTimeout(() => {
    console.log('setTimeout')
  }, 300)
  fetch('http://localhost/study/html/demo.json',{
    headers: {
      'content-type': 'application/json'
    }
  }).then(res => {
    console.log('fetch')
  })
  let i = 0
  while(i < 10000) {
    i++
  }
  console.log(i)
  console.log(&#39;进程结束&#39;)
결과에서 알 수 있듯이 세 가지 비동기 처리 유형은 메인 스레드 코드의 실행을 차단하지 않으며 ajax, fetch, setTimeout은 코드가 실행되는 순서에 따라 콜백 함수를 실행합니다. 처리가 종료됩니다.

Nodejs의 Eventloop

Node의 이벤트 루프는 관찰자의 우선순위에 따라 실행됩니다. process.nextTick -> > setImmediate

setTimeout(() => {
  console.log('setTimeout')
}, 0)
setImmediate(() => {
  console.log('setImmediate1')
  process.nextTick(() => {
    console.log('setImmediate1 插入nextTick')
  })
})
setImmediate(() => {
  console.log('setImmediate2')
})
process.nextTick(() => {
  setTimeout(() => {
    console.log('nextTick1 setTimeout')
  }, 100)
  console.log('nextTick1')
})
process.nextTick(() => {
  console.log('nextTick2')
})
console.log('正常执行')
Summary

이벤트 루프의 실행 특성은 멀티 스레드에서 벗어나 단일 스레드를 사용하는 데 있습니다. 교착 상태 및 상태 동기화 및 기타 문제는 비동기식을 사용하여 단일 스레드가 차단되지 않도록 하여 CPU를 더 잘 활용합니다.

관련 추천:

자바스크립트 이벤트 루프 메커니즘의 세부 사항 - 2강
# 🎜 🎜#

Node.js 이벤트 루프 및 콜백 함수에 대한 심층적인 이해

위 내용은 node.js의 이벤트 루프(EventLoop)에 대한 자세한 소개(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.