Sobes.tech
Middle+

Көк жиптер (green threads) эмне?

sobes.tech AI

AIден жооп

Жасыл жиптер — бул колдонуучу кеңейтүүсүндө башкарылуучу жиптер, ал эми иштетүү тутумунун деңгээлинде эмес. Алар иштетүү тутумунун жиптерине түздөн-түз көрсөтүлбөйт. Жасыл жиптердин планировкасы жана контекстти которуу программалоо тилинин run-таймында же атайын китепкананын жардамы менен жүргүзүлөт.

Негизги өзгөчөлүктөрү:

  • Башкаруу: толугу менен run-тайм тарабынан жүргүзүлөт.
  • Ресурстар: натыйжалуулугу боюнча иштетүү тутумунун нативдүү жиптерине салыштырмалуу аз системдик ресурстарды (жад жана CPU убактысы) талап кылат.
  • Пландоо: кызматташуу (cooperative multitasking). Жип ачык түрдө башкарууну өткөрүп берүү керек, башка жасыл жип аткарылышы үчүн.
  • Параллелизм: кызматташуу жана колдонуу кеңейиши аркылуу, жасыл жиптер көп ядролуу процессорлордо бирдей аткарууну колдобойт, кошумча механизмдерсиз (мисалы, бир нече процесстерди колдонуу, ар бири өз жасыл жиптери менен).

Rubyда, өзгөчө эски версияларда (1.9 чейин) жана MRI (Matz's Ruby Interpreter) менен, жасыл жиптер колдонулчу. Бул көп ядролуу системаларда иштөө натыйжалуулугунун көйгөйлөрүнө алып келчү, анткени бир гана жасыл жип кез келген учурда аткарылчу, Global Interpreter Lock (GIL) менен блоктолгон. Кийинки версияларда MRI жана альтернативдүү ишке ашырылыштарда (JRuby, Rubinius) натыйжалуулук үчүн нативдүү иштетүү тутумунун жиптери колдонулат.

# Rubyда жиптердин мисалы (версияга жана ишке ашыруу түрүнө жараша, жасыл же нативдүү болушу мүмкүн)
t1 = Thread.new do
  puts "Жип 1 башталды"
  sleep(1)
  puts "Жип 1 аяктады"
end

t2 = Thread.new do
  puts "Жип 2 башталды"
  sleep(1)
  puts "Жип 2 аяктады"
end

t1.join # t1 жиптин аяктоосун күтөт

t2.join # t2 жиптин аяктоосун күтөт

puts "Бардык жиптер аяктады"

Жасыл жана нативдүү жиптердин салыштырылышы:

өзгөчөлүк Жасыл жиптер Нативдүү иштетүү тутумунун жиптери
Башкаруу Колдонуучу кеңейиши Жеке иштетүү тутуму ядросу
Куруу/айлантуу Арзан Кымбат
Пландоо Кесиптик (кооперативдик) Алдын ала белгиленген
Параллелизм чектелүү (бир CPU) механизмдерсиз Толук (бир нече CPU)
Блоктоочу чакыруулар Бардык интерпретатор/процесс блоктолот Тек гана учурдагы нативдүү жип блоктолот

Азыркы Rubyда (1.9 жана андан кийинки MRI) Thread стандарттык нативдүү жиптер болуп саналат. Жасыл жиптер, негизги параллелизм моделинде, азыр MRIда сейрек кездешет, бирок белгилүү китепканаларда же альтернативдүү run-таймдарда кездешиши мүмкүн.