Bir iplik veya tel (çalışan) veya görev ( ISO / IEC 2382-7: 2000 tarafından standartlaştırılmış terim ve tanım : Bilinen diğer adlar: hafif işlem , komut dizisi , aerodinamik işlem , exétron veya yürütme birimi veya birim işlemi ) bir işleme benzer, çünkü her ikisi de bir işlemcinin makine dilindeki bir dizi talimatı yürütür . Kullanıcının bakış açısından, bu yürütmeler paralel olarak gerçekleşiyor gibi görünüyor . Her süreç kendi sahip olduğu Bununla birlikte, sanal bellek , ipler aynı sürecin kendi sanal bellek paylaşır. Ancak, tüm iş parçacıklarının kendi yürütme yığını vardır .
Lifler tipik olarak kullanılır GUI ( grafik kullanıcı arabirimi a) programı beklentileri asenkron olarak telekomünikasyon veya için programların HPC (örneğin, bir video, bir matematiksel simülasyon vb şifreleyen.).
Gerçekten de, grafiksel bir arayüz durumunda, giriş cihazlarının aracıları aracılığıyla kullanıcının süreçle etkileşimleri, asenkron beklemeler için kullanılana benzer bir teknik olan bir iş parçacığı tarafından yönetilir . hesaplama süresi) bir veya daha fazla başka iş parçacığı tarafından işlenir . Bu yazılım tasarım tekniği bu durumda avantajlıdır çünkü kullanıcı bir görevi gerçekleştirirken bile programla etkileşime devam edebilir . Kullanıcının metnini girmeye devam etmesine izin verirken yazım denetiminin yapıldığı kelime işlemcilerde pratik bir uygulama bulunur. Bu nedenle dişlerin kullanılması, yoğun işleme aşamaları sırasında artık herhangi bir blokaj olmadığından, bir uygulamanın kullanımını daha akıcı hale getirmeyi mümkün kılar.
Yoğun bir hesaplama programı durumunda, birkaç iş parçacığının kullanılması, çok işlemcili makinelerde çok daha hızlı gerçekleştirilmesine izin veren işlemeyi paralelleştirmeyi mümkün kılar .
İki süreç birbirinden tamamen bağımsız ve izole edilmiştir. İş parçacıkları işlemin durumu, bellek alanları ve diğer kaynaklar hakkında bilgi paylaşırken , yalnızca IPC gibi sistem tarafından sağlanan bir API aracılığıyla etkileşim kurabilirler . Aslında, kenara gelen çağrı yığını gibi mekanizmalar parçacığı yerel depolama, ve her uygulanacağı konusunda bazı nadir istisnalar özgü, ipler her şeyi paylaşmak. Herhangi bir değişiklik olmadığı için sanal bellek , bağlam anahtarı ( bağlam anahtarı iki arasında) parçacıkları iki süreç arasındaki bağlam anahtarı daha az zaman alır. Bu, birden çok iş parçacığı kullanarak programlamanın bir avantajı olarak görülebilir .
Belirli durumlarda, iş parçacığı kullanan programlar , özellikle birkaç işlemciye sahip makinelerde , geleneksel mimariye sahip programlardan daha hızlıdır . Bağlam değiştirme maliyeti sorununun yanı sıra, birden fazla işlemin kullanılmasından kaynaklanan en büyük ek yük, ayrı işlemler arasındaki iletişimden kaynaklanmaktadır. Aslında, iş parçacıkları arasında kaynakların paylaşımı, bir işlemin farklı iş parçacıkları arasında iki ayrı işlem arasında olduğundan daha verimli iletişime izin verir . İki ayrı işlemin iletişim kurmak için sistem tarafından sağlanan bir mekanizma kullanması gerektiğinde, iş parçacıkları , belleği de dahil olmak üzere işlemin durumunun bir kısmını paylaşır. Salt okunur veri durumunda, herhangi gerek bile yoktur senkronizasyon mekanizmasına ilişkin konular Geçiş aynı verileri kullanır.
Programlama kullanarak konuları Ancak daha katıdır sıralı programlama ve başka olduğunu ederken bazı paylaşılan kaynaklara erişim, bir sürecin devlet geçici olarak tutarsız hale önlemek için, programın kendisi tarafından sınırlandırılmalıdır parçacığı olan bu görüntülemek için gerek gidiyor işlem durumunun bir kısmı. Bu nedenle, senkronizasyon mekanizmalarının ( örneğin semaforlar kullanılarak) kurulması zorunludur , ancak senkronizasyon kullanımının yanlış kullanılması durumunda kilitlenme durumlarına yol açabileceği akılda tutulmalıdır .
İş parçacığı kullanan programların karmaşıklığı, yapılacak işi sırayla birkaç basit işleme erteleyen programlardan önemli ölçüde daha fazladır (paralel olarak çalışan birkaç işlem durumunda karmaşıklık benzerdir). Bu artan karmaşıklık, bir programın tasarım veya uygulama aşamasında kötü yönetildiğinde , aşağıdakiler gibi birçok soruna yol açabilir:
İşletim sistemleri genellikle uygulamak konuları , genellikle denilen iplik sistemi ya konuları yerli (aksine parçacığı bir ilişkili programlama dili verilen). Windows API veya POSIX Threads gibi işletim sistemine özel bir API aracılığıyla kullanılırlar . Genel olarak, bu API nesne yönelimli değildir ve uygulanması nispeten karmaşık olabilir, çünkü yalnızca ilkel işlevlerden oluşur ve bu genellikle zamanlayıcının çalışması hakkında biraz bilgi gerektirir .
Yerel iş parçacıklarının avantajı, API'leri çekirdekte harcanan süreyi en aza indirmeye ve gereksiz yazılım katmanlarını ortadan kaldırmaya yardımcı olduğu için maksimum performansa izin vermeleridir . Bunların ana dezavantajı, API'nin ilkel doğası gereği, daha büyük bir uygulama karmaşıklığıdır.
Gibi bazı programlama dilleri, Smalltalk ve bazı uygulamaları Java için destek entegre parçacığı uygulanan userspace ( yeşil ipler () içinde ), ne olursa olsun ana makine işletim sisteminin yetenekleri.
Çoğu dil ( çoğu işletim sisteminde Java , C# .NET , C++ , Ruby …) işletim sisteminin multithreading servislerini doğrudan kullanmak için dil uzantılarını veya kitaplıkları kullanır , ancak taşınabilir bir şekilde. Son olarak, Haskell gibi diller , iki yaklaşımın ortasında bir hibrit sistem kullanır. İhtiyaçlara bağlı olarak performans nedenleriyle, çoğu dilde yerel iplik veya yeşil iplik seçimine izin verildiğini unutmayın (özellikle elyaf kullanımı yoluyla ). Ada (dil) gibi diğer diller de iş parçacığı kavramını kullanmadan işletim sisteminden bağımsız çoklu görev uygular .
C++, C++ 11 adlı yeni C++ standardı olduğundan , bir iş parçacığı yönetim kitaplığına da sahiptir ( Boost'tan ): sınıf modeli std::thread. Bu kullanımı kolaydır ve iş parçacığı oluşturmanıza ve yürütmenize olanak tanır . Önceden, her çerçeve , genellikle doğrudan sistemin yerel iş parçacıklarına bağlı olan kendi iş parçacığı yönetimi katmanını uygulamak zorundaydı .
Paralel programlamada, temel prensip sağlamaktır evresel tarafından kullanılan yazılım kişilerin parçacıkları ya tasarımı (ile saf fonksiyonları ) ya da ile senkronizasyon (bir kullanımı ile, özellikle Muteksleri işlev çağrısı çevreleyen.).
prosedürel programlamaProsedürel programlamada, işletim sisteminin yerel iş parçacıkları çoğunlukla doğrudan kullanılır . Kullanımları, avantajları ve dezavantajları ile doğrudan sistemin API'sine bağlıdır. Özellikle, tarafından kullanılan işlevler parçacıkları evresel veya Muteksleri ile korunmaktadır olmalıdır.
Nesne yönelimli programlamaNesne yönelimli programlama olarak, kullanımı, iplikler genel olarak yapılır miras bir gelen genel üst sınıf bir olan (ya da sınıf modeli) saf sanal bir yöntem kod paralel yürütülür içerecektir. Paralelleştirmek istediğiniz şeyi uygulayan türetilmiş sınıfı yazmanız, onu başlatmanız ve iş parçacığını başlatmak için belirli bir yöntemi (genellikle Run veya eşdeğeri olarak adlandırılır ) çağırmanız gerekir . Ayrıca, basit iş parçacıklarının oluşturulmasını büyük ölçüde basitleştiren, görevin sonunu durdurma veya bekleme yöntemleri de vardır . Ancak, daha karmaşık işlemler ( çok sayıda iş parçacığında engel , kesin öncelik ayarları vb.), yerel iş parçacıklarını kullanmaktan daha az kolay olabilir .
Böyle bir sınıfın ayrı örneklerinin her biri , yan etkileri olmayan iş parçacıkları tarafından kullanılabildiğinde, yeniden giriş sınıfından bahsediyoruz; bu, genellikle , sınıfın uygulanmasında genel veya statik bir öğenin yokluğu anlamına gelir . Biz de bir söz evreli sınıfının çeşitli zaman ipler eşzamanlılık soruna yol açmadan bu sınıfın tek bir örneğini kullanabilirsiniz. İş parçacığı için güvenli bir sınıf zorunlu olarak yeniden girişlidir, ancak bunun tersi yanlıştır.
Fonksiyonel programlamaDoğası gereği, işlevsel programlamadaki her şey reentrant - ve genellikle iş parçacığı için güvenli - olduğundan, birkaç nadir istisna dışında, iş parçacıklarının uygulanması bu paradigma tarafından büyük ölçüde basitleştirilmiştir. Genel olarak, kodun paralelleştirilmesi yalnızca sözleşmelere ve çağrı dizilerine bağlıdır: tabii ki önce hesaplamayı gerektirir , bu da iki işlevi paralelleştirmeyi engeller. Ancak bu kısıtlamalar işlevsel programlamaya özgü değildir, uygulanan algoritmanın doğasında vardır.
Dekoratör , Fabrika Yöntemi , Komut veya Proxy gibi birçok desen iş parçacıklarından yararlanabilir . Genel olarak, bir kalıbın bir yazılım varlığına herhangi bir bilgi aktarımı , iş parçacığı kullanımının nesnesi olabilir .
Diğer klasik örnekler şunları içerir:
Hyper-Threading teknolojisi bazılarının Intel işlemciler karıştırılmamalıdır ile dişler . Bu teknoloji, hem ayrı işlemlerin hem de iş parçacıklarının aynı anda yürütülmesine izin verir . Birden çok işlemciden ( SMP ) veya Hyper-Threading'i entegre eden işlemcilerden oluşan herhangi bir makine, birden çok işlemin yanı sıra iş parçacığı kullanan programların daha hızlı yürütülmesine olanak tanır .