Koja je razlika između niti i vlakana?

Koja je razlika između niti i vlakana? Čuo sam za rubin vlakna, i pročitao sam da su dostupni na drugim jezicima, može li mi netko objasniti jednostavnim riječima koja je razlika između niti i vlakna.

127
28 апр. tatsuhirosatou set 28 tra. 2009-04-28 07:27 '09 u 7:27 2009-04-28 07:27
@ 10 odgovora

Najjednostavnije rečeno, općenito se smatra da su niti preventivne (iako to ne mora uvijek biti točno, ovisno o operativnom sustavu), dok se vlakna smatraju svjetlim, ko-nitima. Oba su odvojena izvršna puta za vašu aplikaciju.

S nitima: trenutna putanja izvršenja može biti prekinuta ili u bilo kojem trenutku istekla (napomena: ova izjava je generalizacija i ne mora uvijek biti izvedena ovisno o OS / threading / etc. Package). To znači da je za tokove integritet podataka veliki problem, budući da se jedan tok može zaustaviti usred ažuriranja dijela podataka, što integritet podataka ostavlja u lošem ili nepotpunom stanju. To također znači da operativni sustav može iskoristiti višestruke procesore i procesorske jezgre, istodobno pokrenuti više od jedne niti i ostaviti ih razvojnom programu da zaštiti pristup podacima.

S vlaknima: trenutna putanja izvršenja se prekida samo kada vlakno daje izvršenje (isto kao gore). To znači da vlakna uvijek počinju i zaustavljaju se na jasno definiranim mjestima, tako da je integritet podataka mnogo manji. Osim toga, budući da se vlakna često upravljaju u korisničkom prostoru, ne moraju se napraviti skupi prekidači konteksta i promjene stanja procesora, što čini prijelaz s jednog vlakna na drugi iznimno učinkovit. S druge strane, budući da niti jedno od dva vlakna ne može raditi u isto vrijeme, jednostavno korištenje samo vlakana neće iskoristiti prednosti nekoliko procesora ili nekoliko procesorskih jezgri.

117
28 апр. Odgovorite Jasonu Cocou 28. travnja 2009-04-28 07:40 '09 u 7:40 2009-04-28 07:40

U Win32, fiber je vrsta stream-a koju upravlja korisnik. Vlakna imaju svoj stack i vlastiti pokazivač instrukcija, itd. Ali vlakna nisu dodijeljena OS-u: morate eksplicitno nazvati SwitchToFiber. Protokovi su, nasuprot tome, uvjetno određeni sustavom operacija. Dakle, grubo govoreći, fiber je nit koja se kontrolira na razini aplikacije / runtimea, i nije istinska nit OS-a.

Posljedice su da su vlakna jeftinija i da aplikacija ima veću kontrolu nad planiranjem. To može biti važno ako aplikacija stvara više paralelnih zadataka i / ili ih želi optimizirati pri pokretanju. Na primjer, poslužitelj baze podataka može odabrati korištenje vlakana, a ne niti.

border=0

(Možda postoje drugi uvjeti korištenja za isti pojam kao što je navedeno, to je definicija Win32.)

41
28 апр. odgovor je dat itowlson 28. travnja 2009-04-28 07:35 '09 u 7:35 2009-04-28 07:35

U potocima se koristi pre-preventivno planiranje, dok vlakna koriste zajedničko planiranje.

S navojem se kontrolna nit može prekinuti u bilo kojem trenutku, a druga nit može preuzeti. S više procesora možete istovremeno raditi s više niti (istovremenim višenitnim ili SMT). Kao rezultat toga, morate biti vrlo oprezni pri istodobnom pristupu podacima i zaštiti vaših podataka pomoću muteksa, semafora, varijabilnih uvjeta itd. Često je vrlo teško dobiti pravo.

Pomoću vlakana, kontrola se prebacuje samo kada se prenosi, obično s pozivom funkcije s imenom kao što je yield() . To pojednostavljuje simultani pristup podacima, budući da ne morate brinuti o atomičnosti struktura podataka ili muteksa. Dokle god ne pristanete, ne postoji opasnost od iskrcavanja i imate još jedno vlakno koje pokušava čitati ili mijenjati podatke s kojima radite. Kao rezultat toga, ako vaše vlakno ulazi u beskonačnu petlju, niti jedno drugo vlakno ne može raditi jer niste inferiorni.

Također možete miješati pređe i vlakna, uzrokujući probleme koji se suočavaju. Ne preporučuje se, ali ponekad može biti ispravno ako se radi pažljivo.

38
28 апр. odgovor je dao Adam Rosenfield 28. travnja. 2009-04-28 07:38 '09 u 7:38 am 2009-04-28 07:38

U početku bih preporučio čitanje ovog objašnjenja razlike između procesa i niti kao referentnog materijala.

Čim ga pročitate, prilično je jednostavno. Načini niti mogu se implementirati u kernelu ili u korisničkom prostoru, ili se dva mogu miješati. Vlakna su uglavnom niti koje se implementiraju u prostor korisnika.

  • Ono što se obično naziva nit je nit izvršenja implementirana u kernelu: ono što je poznato kao nit jezgre. Kernel raspoređivanje niti upravlja se isključivo kernelom, iako nit jezgre može dobrovoljno osloboditi CPU ako to želi. Prednost kernela je da može koristiti blokiranje I / O i dopustiti kernelu da brine o raspoređivanju. Glavni nedostatak je u tome što je prebacivanje niti relativno sporo, jer zahtijeva hvatanje u jezgru.
  • Vlakna su teme korisničkog prostora čije se planiranje obrađuje u korisničkom prostoru pomoću jednog ili više niti jezgre u jednom procesu. To čini brzu izmjenu vlakana. Ako grupirate sva vlakna koja pristupaju određenom skupu dijeljenih podataka u kontekstu jedne niti jezgre, a njihovo raspoređivanje obrađuje jedna nit jezgre, tada možete ukloniti probleme s vremenskim slijedom, jer će se vlakna učinkovito pokretati u sekvencijalnom načinu i morate ih kontrolirati planiranje. Grupiranje povezanih vlakana pod jednom niti jezgre je važno, budući da se jezgra jezgre u kojoj se izvode može propustiti. U mnogim drugim odgovorima ovaj trenutak nije naveden. Osim toga, ako koristite blokiranje I / O u vlaknu, cijeli tok jezgre je dio blokova, uključujući sva vlakna koja su dio tog toka jezgre.

U odjeljku 11.4, "Procesi i teme u sustavu Windows Vista" u suvremenim operativnim sustavima, komentari na Tanenbaum:

Iako su vlakna konzistentno planirana, ako postoji nekoliko niti koje planiraju vlakna, postoji mnogo pažljive sinkronizacije, tako da vlakna ne ometaju jedno drugo. Da bi se pojednostavila interakcija između niti i vlakana, često je korisno stvoriti samo onoliko niti kao što postoje procesori za njihovo pokretanje, a niti afiniteta za svaki rad samo na određenom skupu dostupnih procesora ili čak jednog procesora. Svaka nit može tada pokrenuti određeni podskup vlakana, uspostavljajući jedan do više između niti i vlakana, što pojednostavljuje sinkronizaciju. Međutim, još uvijek postoje mnoge poteškoće s vlaknima. Većina Win32 knjižnica ne poznaje u potpunosti vlakna, a aplikacije koje pokušavaju koristiti vlakna kao da su potoci naići će na razne neuspjehe. Jezgra ne poznaje vlakna, a kada vlakno uđe u jezgru, nit koju ona izvršava može blok i jezgru planirati proizvoljni konac u procesor, što ga čini nedostupnim za pokretanje drugih vlakana. Iz tih razloga, vlakna se rijetko koriste, osim kada se prenosi kod iz drugog sustava koji jasno zahtijeva funkcionalnost koju pružaju vlakna.

27
08 нояб. Odgovor dao je Robert S. Barnes 08. studenog. 2013-11-08 12:14 '13 u 12:14 2013-11-08 12:14

Imajte na umu da Windows 7, osim Threads and Fibers, sadrži i Planiranje korisničkog načina rada :

Planiranje korisničkog načina (UMS) je jednostavan mehanizam koji aplikacije mogu koristiti vlastite niti. Aplikacija se može prebacivati ​​između UMS niti u korisničkom načinu rada bez uključivanja planera sustava i ponovnog uspostavljanja kontrole nad procesorom ako postoje UMS blok tokovi u kernelu. UMS niti se razlikuju od vlakana tako da svaka UMS nit ima svoj vlastiti kontekstni niz umjesto dijeljenja kontekstualnog toka jednog toka. mogućnost prebacivanja između niti u korisničkom načinu rada čini UMS učinkovitijim od nizova niti za upravljanje velikim brojem kratkih radnih stavki koje zahtijevaju višestruke sistemske pozive.

Više informacija o strujama, vlaknima i UMS-u možete dobiti ako pogledate Dave Probert: Inside Windows 7, Planer korisničkog načina (UMS) .

12
28 апр. Odgovori Grant Wagner 28. travnja. 2009-04-28 20:33 '09 u 20:33 2009-04-28 20:33

Koncepcije su raspoređene od strane OS-a (proaktivno). Konac može biti zaustavljen ili nastavljen u bilo koje vrijeme od strane OS-a, ali vlakna su više ili manje kontrolirana (zajednički) i inferiorna su jedna prema drugoj. To jest, programator kontrolira kada vlakna izvode njihovu obradu, i kada se ova obrada prebacuje na drugo vlakno.

6
28 апр. odgovor daje Arnold Spence 28 travnja. 2009-04-28 07:35 '09 u 7:35 2009-04-28 07:35

Teme su izvorno nastale kao svjetlosni procesi. Isto tako, vlakna su svjetlosni konac, koji (pojednostavljeno) počiva na samim vlaknima, planirajući jedni druge, dobivajući kontrolu.

Pretpostavljam da je sljedeći korak nizovi gdje im morate poslati signal svaki put kada želite da slijede upute (za razliku od mog 5. sina :-). U stara vremena (pa čak i sada na nekim ugrađenim platformama) sve su niti bile vlakna, nije bilo preventivne intervencije i morali ste napisati svoje niti kako bi se dobro ponašali.

5
28 апр. odgovor je dat paxdiablo 28. travnja 2009-04-28 07:39 '09 u 7:39 2009-04-28 07:39

Niti imaju tendenciju da se oslanjaju na kernel da prekine nit tako da ona ili neka druga nit može raditi (što je bolje poznato kao Pre-emptive multitasking), dok vlakna koriste zajednički višezadaćnost, gdje samo vlakno odbija raditi od njega tako da drugi vlakna mogu raditi.

Neke korisne veze koje to bolje objašnjavaju nego što sam ja vjerojatno su sljedeće:

4
28 апр. Odgovor dao Mike Lowen 28. travnja 2009-04-28 07:38 '09 u 7:38 am 2009-04-28 07:38

Definicija vlakana Win32 je zapravo "zelena tema" instalirana u Sun Microsystems. Nema potrebe trošiti pojam "vlakno" na nit bilo koje vrste, tj. Nit koja se izvodi u korisničkom prostoru pod kontrolom biblioteke korisničkog koda / niti.

Da biste razjasnili argument, pregledajte sljedeće komentare:

  • Pomoću hyperthread-a, multi-core procesor može primati više niti i distribuirati ih po jednu u svakoj jezgri.
  • Superskalarni cjevovodni procesor prihvaća jedan tok za izvršenje i koristi razinu paralelizma (ILP) za brzo pokretanje toka. Možemo pretpostaviti da je jedna struja podijeljena na paralelna vlakna koja djeluju u paralelnim cjevovodima.
  • SMT procesor može uzeti više niti i usporiti ih u vlakna za paralelno izvođenje na više transportera, učinkovitije korištenje transportera.

Moramo pretpostaviti da su procesi napravljeni od filamenata i da niti moraju biti izrađene od vlakana. S obzirom na tu logiku, uporaba vlakana za druge vrste tokova nije točna.

1
09 марта '15 в 21:34 2015-03-09 21:34 odgovor je dao Billmic 9. ožujka u 21:34 2015-03-09 21:34

Fiber je jednostavna struja koja koristi kolaborativnu višezadaćnost umjesto proaktivne višezadaćnosti. Pokrenuto vlakno mora biti jasno "inferiorno" kako bi omogućilo drugim vlaknima da rade, što njihovu implementaciju čini lakšom od kernela ili korisničkih niti.

Coroutine je komponenta koja sažima potprogram koji omogućuje višestruke ulazne točke za pauziranje i nastavak izvršavanja na određenim lokacijama. Za razliku od potprograma, koroutine mogu izaći pozivom drugih koroutina, koje se kasnije mogu vratiti na mjesto gdje su pozvani u izvornom koroutinu.

0
02 нояб. Odgovor dao Ali Shah Meghani 02. studenog. 2017-11-02 19:19 '17 u 19:19 2017-11-02 19:19

Ostala pitanja o oznakama ili Ask a question