fibers

___ tag123rubyonrails ___ Ruby on Rails ist ein Open-Source-Full-Stack-Webanwendungs-Framework, das in Ruby geschrieben ist. Es folgt dem populären MVC-Framework-Modell und ist bekannt für seinen "convention over configuration" -Ansatz für die Anwendungsentwicklung. ___ tag123ruby ___ Ruby ist eine multi-plattform Open-Source, dynamische objektorientierte interpretierte Sprache, erstellt von Yukihiro Matsumoto (Matz) im Jahr 1995. Die [Ruby] -Tag ist für Fragen im Zusammenhang mit der Ruby-Sprache, einschließlich seiner Syntax und seiner Bibliotheken . Fragen speziell zum Ruby-on-Rails-Framework sollten mit [ruby-on-rails], nicht [ruby] getaggt werden. Verwenden Sie dies nicht, um Ruby in der japanischen Sprache zu markieren. ___ qstnhdr ___ Was ist der Sinn von Fasern in Ruby? ___ tag123multithreading ___ Multi-Threading ist die Fähigkeit eines Computers oder eines Programms, Arbeit gleichzeitig oder asynchron auszuführen, indem mehrere gleichzeitige Ausführungsströme (im Allgemeinen als Threads bezeichnet) verwendet werden. ___ answer16658479 ___

Fasern sind eine Möglichkeit, beliebige Code-Blöcke zu unterbrechen und wieder aufzunehmen. Ein solches Beispiel ist nicht wirklich ein großartiger Anwendungsfall, da es keinen wirklichen Vorteil gegenüber der herkömmlichen Art bietet, Zeilen zu lesen und zu verarbeiten.

Wenn Sie es in diesem speziellen Beispiel verbessern wollten, würden Sie eine Schnittstelle im Enumerator-Stil schreiben, so dass Sie schreiben könnten:

%Vor%

Wo Fasern wichtig werden, schreiben wir asynchronen Code. Zum Beispiel müssen Sie innerhalb der EventMachine Umgebung einen asynchronen Aufruf durchführen, einen Block Code anhalten und ihn fortsetzen, wenn Sie den Code erhalten Antwort.

Das sieht dann so aus:

%Vor%

Diese Art verschachtelter, verschachtelter und neu verschachtelter Call-Struktur wird als "Callback-Hölle" bezeichnet, da es sehr schwierig wird, sie zu verwalten, sobald Ihre Logik nicht trivial wird. Eine Möglichkeit, diese Struktur abzuflachen, besteht darin, Fasern zu verwenden. Ein richtiges Fiber-ites Äquivalent ist:

%Vor%

Fasern können Ausnahmeregelungen nutzen, bei denen Code vom Rückruftyp nicht möglich ist. Ausnahmen können, wenn sie effektiv verwendet werden, einen Codeblock massiv vereinfachen, wie Sie hier sehen können. Statt für %code% auf jeder Antwort zu testen, wird erwartet, dass der Aufruf stattdessen eine Ausnahme vom Typ %code% auslöst.

Callbacks können keine Ausnahmen zuverlässig auslösen, da der Initiator des Aufrufs bereits beim Callback nicht mehr in der Reichweite ist. Dies ist eine grundlegende Einschränkung der asynchronen Programmierung mit Rückrufen. Fiber-gesteuerter Code behält einen ordnungsgemäßen Aufruf-Stack bei, er wird lediglich angehalten und unverändert fortgesetzt, so dass Exceptions den Aufrufer ordnungsgemäß kaskadieren.

Ich habe herausgefunden, dass Fasern sowohl einfach zu verstehen als auch sehr schwierig anzuwenden sind. In den meisten Fällen müssen Sie sie nicht direkt verwenden. Sie verwenden stattdessen eine Bibliothek, die sie verwendet. Das Schreiben von "Fiber-aware" -Code ist dem Schreiben von "Thread-safe" -Code ähnlich. Es kann schwierig sein, richtig zu machen.

    
___ qstntxt ___

Ich verstehe nicht, wie das folgende:

%Vor%

Ist so viel schlimmer als:

%Vor%     
___ tag123fibres ___ Fasern sind Grundelemente zum Implementieren von leichtgewichtiger kooperativer Gleichzeitigkeit in Ruby. Fasern erschienen in Ruby 1.9. ___
1
Antwort

Was ist der Sinn von Fasern in Ruby?

Ich verstehe nicht, wie das folgende: %Vor% Ist so viel schlimmer als: %Vor%     
20.05.2013, 20:53