Şimdi bir örnek vereyim ve bu dört senkron ve asenkron hesaplama modelinin
belirli bir problemi dört farklı şekilde çözmek için nasıl kullanılabileceğini tartışalım.
Bu kadar basit bir şekilde 10 büyüklüğünde bir tamsayı dizimiz olduğunu varsayalım.
Şimdi, size bunun üzerinde bir görev gerçekleştirmeniz gerektiğini söylersem,
ilk görev tüm sayıların toplamını ve ayarı hesaplamak, ikinci
görev ise bu ADI'deki tüm sayıların çarpımını hesaplamaktır.
Açıkçası, normal günlük hayatınızda senkronize tek
iş parçacıklı bir program yazacaktınız.
Basitçe, önce bu alandaki tüm tamsayıların toplamını hesaplayacağınız ve ardından
bu alandaki tüm tamsayıların çarpımını hesaplayacağınız bir deneme başlattınız.
Bu kadar basit.
Sizden bu girdi üzerinde bu iki görevi yerine getirecek bir program
yazmanızı istesem, ilk tercihinizin tek hedefli bir program olacağı açıktır.
Ancak sizi aynı sorunu çözmek için eşzamanlı çok iş parçacıklı bir
program yazmaya zorlarsam, o zaman iki kez başlatmanız mümkün olabilir.
İlk iş parçacığı, tüm tam sayıların toplamını hesaplayan D1 görevini hesaplayacaktır.
Ob-La-Di, ve ikinci iş parçacığı alanın tüm tam sayılarının çarpımını hesaplayacaktır.
Tamam.
Açıkçası, aynı DNA yapısı üzerinde sadece liderlik işlemi gerçekleştiriyorsunuz, bu nedenle bu iki
görevi paralel olarak gerçekleştirmek için senkronize çok iş parçacıklı program çok mümkündür.
Çünkü Reid işlemi çakışmayan bir işlemdir.
Herhangi bir günlük kaydı veya izleme senkronizasyonu mekaniği dağıtmanız gerekmez.
Ama şimdi sizden birinci ve ikinci görevi hesaplamak için eşzamansız, tek iş
parçacıklı bir program yazmanızı isteseydim, o zaman bir program yazacak ve her
bir görevi küçük küçük döngüler halinde yürüterek toplamı ve çarpımı hesaplayacaktınız.
Önce alandaki ilk üç tam sayının toplamını hesaplarsınız ve sonra da
Tek hedefli program, programınızın alandaki ilk beş
tam sayının çarpımını hesaplayacağı çarpma görevine geçecektir.
Ve sonra programınız herhangi bir tam sayının toplamını hesaplama görevine tekrar geçebilir.
Ve bu sefer dört numaralı indeksten altı numaralı indekse kadar olan toplamı hesaplayacaktır.
Ve yine, programınız alandaki tamsayıların
çarpımını hesaplayan önceki göreve geçer.
Ve bu sefer altı ile dokuz arasındaki indeks sayısının çarpımını hesaplayacaktır.
Ve son olarak, alanda kalan tam sayıların toplamını hesaplayacaktır.
Yani bu, bir girdi dizisi üzerinde aynı işlemleri gerçekleştirecek, ancak
eşzamansız bir şekilde gerçekleştirecek eşzamansız, tek iş parçacıklı bir programdır.
Yapılacak işin küçük küçük görevlere bölünmesi ve daha sonra bu görevlerin yerine
getirilmesi burada, alanın tüm resimlerinin toplamının hesaplanması görevi üç alt göreve bölünmüştür.
Tamam.
Dolayısıyla, US ve eşzamanlı programlamada, görev önemli miktarda zaman alacak
kadar büyükse, bu tek görevi burada alt görevlere bölmeyi seçeriz.
Bu, sıfır iki üç indeks konumundan itibaren girdabın tam sayılarının toplamını hesaplama alt görevidir.
Bu da bir başka alt görevdir.
Dolayısıyla, ante'nin tüm tam sayılarının toplamını hesaplama görevimiz üç alt göreve bölünmüştür.
Aynı şey çarpma işlemi için de geçerlidir.
Ancak, görev hesaplanması fazla zaman almayacak kadar küçükse, o zaman
eşzamansız tek iş parçacıklı bir model bu görevi tek
seferde hesaplar, bu görevi alt görevlere bölmeye gerek yoktur.
Ve son olarak, aynı girdi üzerinde Görev bir ve Görev ikiyi hesaplamak için eşzamansız, tek
iş parçacıklı bir program yazmanızı istesem, herhangi bir dadı iki bağımsız iş parçacığı başlatacaktır.
İlk iplik, tek dişli bir motor tasarımı üzerinde tek bir tane kullanacaktır.
Alanın tüm tam sayılarının toplamını hesaplamak için.
Thread iki ise yine atomun tüm tamsayılarının çarpımını
hesaplamak için tasarlanmış asenkron tek Typekit modelini kullanacaktır.
Ancak bunlar çalışan iki farklı tip olduğundan,
buna asenkron çok iş parçacıklı tasarım diyoruz.
Umarım şimdi bu dört hesaplama modeli arasında nasıl ayrım yapacağınızı anlamışsınızdır.
Ancak yine de, bir program yazana kadar ya da bir
şeyleri çalışırken görene kadar her şeyin kristal netliğinde olmayacağına inanıyorum.
Bu nedenle, bu kursun bir sonraki bölümünden itibaren, gerçekleştirilecek bir
işi bireysel görevlere bölebileceğimiz bir kütüphane geliştireceğiz ve daha sonra
bu görevleri bu slaytta tartıştığım gibi aynı şekilde yürütebileceğiz.