Boru hattı (yazılım) - Pipeline (software)

Olarak yazılım mühendisliğinde , bir boru hattı işleme elemanları (bir zincirinden oluşur işlemleri , iplikler , değiş tokuş eden kavramlar , işlevleri , vs. ), her bir eleman çıktısı, bir sonraki giriş böylece yerleştirilmiş; isim, fiziksel bir boru hattına benzetilerek verilmiştir . Genellikle ardışık elemanlar arasında bir miktar tamponlama sağlanır. Bu boru hattı akan bilgiler genellikle bir olan akış bölgesinin kayıtları , bayt ya da bit ve bir boru hattı elemanları olarak adlandırılabilir filtreleri ; bu aynı zamanda borular ve filtreler tasarım modeli olarak da adlandırılır . Elemanları bir boru hattına bağlamak, işlev kompozisyonuna benzer .

Dar anlamda, bir boru hattı doğrusal ve tek yönlüdür, ancak bazen bu terim daha genel akışlara uygulanır. Örneğin, bir esas olarak tek yönlü bir boru hattı olarak bilinen başka bir yönde bir iletişim sahip olabilir dönüş kanalı ya da , arka kanal olarak lexer kesmek ya da bir boru hattı tam iki yönlü olabilir. Tek yönlü ağaç ve yönlendirilmiş döngüsel olmayan grafik topolojileri olan akışlar, (doğrusal) boru hatlarına benzer şekilde davranır - döngülerin olmaması onları basitleştirir - ve bu nedenle genel olarak "boru hatları" olarak adlandırılabilir.

Uygulama

Ardışık düzenler genellikle , tüm öğeleri işlemlerle aynı anda başlatarak ve her işlemin veri okuma isteklerine, yukarı akış süreci tarafından yazılan verilerle otomatik olarak hizmet vererek çok görevli bir işletim sisteminde uygulanır - buna çok işlemli bir ardışık düzen denebilir . Bu şekilde, CPU boşta kalma süresini en aza indirgemek için programlayıcı tarafından doğal olarak işlemler arasında değiştirilecektir . Diğer yaygın modellerde, öğeler genellikle işlemlerle ilgili işletim sistemi ek yükünü azaltmak için hafif iş parçacıkları veya eş anlamlılar olarak uygulanır. İşletim sistemine bağlı olarak, iş parçacıkları doğrudan işletim sistemi veya bir iş parçacığı yöneticisi tarafından planlanabilir. Coroutine'ler her zaman bir formdaki bir coroutine yöneticisi tarafından planlanır.

Genellikle, okuma ve yazma istekleri engelleme işlemleridir; bu, kaynak işlemin yazıldıktan sonra tüm veriler hedef işleme yazılana kadar askıya alındığı ve benzer şekilde hedef işlemin okunduktan sonra yürütülmesi anlamına gelir. , istenen verilerin en azından bir kısmı kaynak işlemden alınana kadar askıya alınır. Bu, her iki işlemin de birbirinin yanıt vermesi için süresiz olarak bekleyeceği bir kilitlenmeye yol açamaz , çünkü iki işlemden en az biri kısa süre sonra talebini işletim sistemi tarafından hizmete sokacak ve çalışmaya devam edecektir.

Performans için, kanal uygulayan çoğu işletim sistemi , kaynak işlemin hedef sürecin şu anda alabildiğinden veya almaya istekli olandan daha fazla veri sağlamasına izin veren boru arabellekleri kullanır . Çoğu Unices ve Unix benzeri işletim sisteminde, tipik olarak "tampon" olarak adlandırılan, potansiyel olarak çok daha büyük ve yapılandırılabilir boyutta bir yön tamponu uygulayan özel bir komut da mevcuttur. Bu komut, hedef işlem kaynak işlemden önemli ölçüde daha yavaşsa yararlı olabilir, ancak yine de kaynak işlemin görevini mümkün olan en kısa sürede tamamlaması istenir. Örneğin, kaynak işlem bir CD'den bir işitsel parçayı okuyan bir komuttan oluşuyorsa ve hedef işlem, dalga biçimi ses verilerini MP3 gibi bir biçime sıkıştıran bir komuttan oluşuyorsa . Bu durumda, tüm yolun bir boru arabelleğinde arabelleğe alınması, CD sürücüsünün daha hızlı dönmesini sağlar ve kullanıcının, kodlama işlemi bitmeden CD'yi sürücüden çıkarmasını sağlar.

Böyle bir tampon komutu, verileri okumak ve yazmak için sistem çağrıları kullanılarak uygulanabilir . Savurgan meşgul bekleyen gibi imkanlar kullanılarak önlenebilir anket veya seçmek ya da çoklu kullanım .

Boru hattı yazılım sistemlerinin bazı önemli örnekleri şunları içerir:

VM / CMS ve z / OS

CMS Ardışık Düzenleri , VM / CMS ve z / OS sistemlerine boru hattı fikrinin bir bağlantı noktasıdır . Birden çok giriş akışını alan ve birden çok çıktı akışı üreten adımlarla Unix kabuklarından çok daha karmaşık boru hattı yapılarını destekler. (Bu tür bir işlevsellik Unix çekirdeği tarafından desteklenir, ancak birkaç program onu ​​karmaşık sözdizimi ve engelleme modları oluşturduğu için kullanır, ancak bazı kabuklar rasgele dosya tanımlayıcı ataması yoluyla desteklemektedir ).

IBM ana bilgisayar işletim sistemlerindeki geleneksel uygulama programlarında, yeniden yönlendirme veya borulamaya izin veren standart giriş ve çıkış akışları yoktur. CMS Pipelines, süreçleri harici programlarla üretmek yerine, ardışık düzeni çalıştırmak için yerleşik programların örneklerini eşzamanlı olarak yürütmek için hafif bir dağıtım programına sahiptir. Tipik UNIX yardımcı programlarını uygulayan ve aygıtlara ve işletim sistemi hizmetlerine arabirim sağlayan 200'den fazla yerleşik program. Yerleşik programlara ek olarak, CMS Boru Hatları , boru hattında kullanılabilen giriş ve çıkış akışlarına sahip kullanıcı tarafından yazılan REXX programlarına izin veren bir çerçeve tanımlar .

IBM ana çerçevelerindeki veriler tipik olarak Kayıt odaklı bir dosya sisteminde bulunur ve bağlı G / Ç aygıtları akış modu yerine kayıt modunda çalışır. Sonuç olarak, CMS Boru Hatlarındaki veriler kayıt modunda işlenir. Metin dosyaları için, bir kayıt bir metin satırı tutar. Genel olarak, CMS Pipelines verileri arabelleğe almaz, ancak veri kayıtlarını bir programdan diğerine kilit adımı tarzında geçirir. Bu, birbirine bağlı bir ardışık düzen ağı aracılığıyla deterministik bir veri akışı sağlar.

Nesne ardışık düzenleri

Bayt akışı tabanlı işlem hatlarının yanı sıra, nesne boru hatları da vardır. Nesne ardışık düzeninde, öğelerin işlenmesi metin yerine nesneler çıkarır. Windows PowerShell , .NET nesnelerini PowerShell çalışma zamanı içindeki işlevler arasında aktaran dahili bir nesne işlem hattı içerir . Limbo programlama dilinde bulunan kanallar , bu metaforun diğer örnekleridir.

GUI'lerde ardışık düzenler

RISC OS ve ROX Desktop gibi grafik ortamlar da boru hatlarını kullanır. RISC OS ve ROX , kullanıcının bir programın verileri nereye yazması gerektiğini belirtmesine izin veren bir dosya yöneticisi içeren bir kaydetme iletişim kutusu sağlamak yerine , bir simge (ve adı belirtmek için bir alan) içeren bir kaydetme iletişim kutusu sağlar . Hedef, simgenin sürüklenip bırakılmasıyla belirlenir. Kullanıcı, diğer programların simgeleri dahil, önceden kaydedilmiş bir dosyanın bırakılabileceği herhangi bir yere simgeyi bırakabilir. Simge bir programın simgesine bırakılırsa, yüklenir ve aksi takdirde kaydedilecek olan içerikler yeni programın standart giriş akışına aktarılır.

Örneğin, dünya çapında web'e göz atan bir kullanıcı , düzenlemek ve yeniden yüklemek istediği .gz sıkıştırılmış bir resimle karşılaşabilir. GUI ardışık düzenlerini kullanarak, bağlantıyı arşiv kaldırma programlarına sürükleyebilir, çıkarılan içerikleri temsil eden simgeyi görüntü düzenleyicisine sürükleyebilir, düzenleyebilir , farklı kaydet iletişim kutusunu açabilir ve simgesini yükleme yazılımlarına sürükleyebilirler.

Kavramsal olarak, bu yöntem geleneksel bir kaydetme iletişim kutusu ile kullanılabilir, ancak bu, kullanıcının programlarının dosya sisteminde gidilebilecek açık ve kolayca erişilebilir bir konuma sahip olmasını gerektirir. Uygulamada, genellikle durum böyle değildir, bu nedenle GUI ardışık düzenleri nadirdir.

Diğer hususlar

"Boru hattı" adı, fiziksel su tesisatı ile kaba bir benzetmeden gelir, çünkü bir boru hattı, suyun genellikle bir borudan akması gibi, bilginin yalnızca bir yönde akmasına izin verir.

Borular ve filtreler , bayt akışlarını veri nesneleri olarak kullanan bir işlevsel programlama biçimi olarak görülebilir ; daha spesifik olarak, G / Ç için belirli bir monad formu olarak görülebilirler .

Ardışık düzen kavramı aynı zamanda Cocoon web geliştirme çerçevesinin veya herhangi bir XProc (W3C Standartları) uygulamasının merkezinde yer alır ve burada bir kaynak akışının nihai gösterimden önce değiştirilmesine izin verir.

Bu model, programların girdisi ve çıktısı olarak metin akışlarının kullanılmasını teşvik eder. Metin programlarına grafik kabuklar oluştururken metne olan bu güven hesaba katılmalıdır .

Ayrıca bakınız

Notlar

  1. ^ "Kesik boru" sinyalleri gibi istisnalar vardır.
  2. ^ "Monadic I / O ve UNIX kabuk programlama" .

Dış bağlantılar