Sobes.tech
Senior
63

Netpoller деген не? Ол не үшін қажет және горутиналар ол жерге қалай түседі және қайтып оралады?

Сұралған компаниялар
техвил

AI-дан жауап

sobes.tech AI

Netpoller — бұл Go-да операциялық жүйе деңгейінде блокталмайтын енгізу-шығару механизмін жүзеге асыратын механизм, ол epoll (Linux), kqueue (BSD/macOS) немесе IOCP (Windows) сияқты жүйелік шақыруларды пайдаланады. Бұл көп санды желілік қосылымдарды тиімді басқару үшін қажет.

Қалай жұмыс істейді:

  • Енгізу-шығару операцияларын орындайтын горутинтер netpoller-ге тіркеледі.
  • Горутина оқуға немесе жазуға тырысқанда, егер операция дайын болмаса (мысалы, оқуға деректер жоқ болса), ол блокталады және netpoller-ге беріледі.
  • Netpoller жүйелік шақырулар арқылы енгізу-шығару оқиғаларын бақылайды және операция дайын болғанда Go жоспарлаушысына хабарлайды.
  • Жоспарлаушы горутинті босатады, ол жұмысын жалғастырады.

Осылайша, горутинтер жүйелік ағындарды блоктамайды, ал енгізу-шығару оқиғалары бойынша ауысады, бұл желілік қосымшаларды тиімді масштабтауға мүмкіндік береді.

Бұл процесс қарапайым түрде келесідей көрінеді:

// Горутина желілік қосылымнан оқуға тырысады
n, err := conn.Read(buf)
// Егер деректер болмаса, горутина блокталып, netpoller-ге тіркеледі
// Netpoller оқуға дайын оқиға күтеді
// Деректер пайда болғанда, горутина босатылады және жұмысын жалғастырады

Runtime Go ішіндегі бұл процесс автоматтандырылған және әзірлеуші үшін көрінбейді.