asyncTool, herhangi bir çok iş parçacıklı paralel, seri, engelleme, bağımlılık ve geri çağrı çerçevesini çözer

Çerçeve şu anda Jingdong Uygulaması Arka Planı Zorlu, yüksek eşzamanlılık ve büyük kullanıcılar gibi karmaşık senaryoların incelenmesini ve test edilmesini kabul edin ve herhangi bir zamanda gerçek duruma göre güncellemeleri ve bugFix'i yayınlayın.

Blockchain ile ilgileniyorsanız, projenin yazarının Java Blockchain'in Altından Başlarken adlı başka bir GVP projesine başvurabilirsiniz.

Sadece bu çerçeveyi kullanmanız gerekiyorsa, lütfen okuyun. Bu çerçevenin adım adım nasıl uygulandığına dair derinlemesine bir anlayışa sahip olmanız gerekiyorsa, gereklilikleri almaktan her adımda düşünmeye, her sınıfın neden böyle tasarlandığını, neden bu yöntemlerin var olduğunu, yani bu çerçeveyi 0'dan 1'e nasıl geliştireceğinizi, yazar csdn, bu küçük çerçeve dahil ancak bununla sınırlı olmamak üzere ara yazılımın sıfırdan nasıl geliştirildiğinden bahsetmek için bir sütun açtı. JD.com'daki meslektaşlar ayrıca cf.'de erp'yi arayabilirler.

Paralel olarak yaygın senaryolar

1 İstemci, diğer N mikro hizmetlerinin arabirimlerini çağırması gereken sunucu arabirimini ister

Örneğin, siparişimi talep ederseniz, kullanıcının rpc'sini, ürün ayrıntıları rpc'sini, envanter rpc'sini, kuponları ve diğer birçok hizmeti aramanız gerekir. Aynı zamanda bu servislerin karşılıklı bağımlılıkları da vardır.Örneğin, önce kullanıcının belirli bir alanını almalı, ardından veri talep etmek için belirli bir rpc servisine gitmelisiniz. Nihai edinme tamamlandıktan veya zaman aşımı sona erdikten sonra sonuçlar özetlenir ve müşteriye iade edilir.

2 N görevi paralel olarak yürütün ve ardından bu 1-N görevin yürütme sonuçlarına göre bir sonraki görevi yürütmeye devam edip etmeyeceğinize karar verin

Örneğin, kullanıcı e-posta, cep telefonu numarası ve kullanıcı adı ile giriş yapabilir ve sadece bir giriş arayüzü vardır.Kullanıcı bir giriş isteği başlattıktan sonra veritabanını aynı anda posta kutusu, cep telefonu numarası ve kullanıcı adına göre paralel olarak kontrol etmemiz gerekir.Bir başarılı olduğu sürece kabul edilir Başarılı olursa, sonraki adıma geçebilirsiniz. Önce e-posta adresini sonra cep telefonu numarasını denemek yerine ...

Diğer bir örnek ise, bir arayüzün her partide geçirilecek parametre miktarını sınırlamasıdır.En fazla 10 ürünün bilgisini her sorguladığımda, sorgulamak için 45 ürünüm var ve bunları paralel olarak 5 yığın halinde sorgulayabilir ve ardından 5 sorgu yığınını sayabilirim. sonuç. Bu, tüm kontrolleri başarılı olmaya zorlayıp zorlamamanıza veya kaç kontrol başarılı olursa olsun müşteriye geri dönmenize bağlıdır.

Başka bir örnek bir arayüz, işlenecek 5 ön görev var. Bunlardan üçünün takibi yürütmek için yürütülmesi gerekir, diğer ikisi isteğe bağlıdır.Bu üçü yürütüldüğü sürece bir sonraki adım gerçekleştirilebilir.O zaman, diğer ikisi başarılı olursa ve henüz yürütülmemişse değer kazanacaktır. Varsayılan değerdir.

3 İş parçacığı yalıtımı gerektiren çok toplu görevler

Birden çok görev grubu gibi, her görev grubu birbiriyle ilişkili değildir, her grubun bağımsız bir iş parçacığı havuzuna ihtiyacı vardır ve her grup, bağımsız bir yürütme birimleri kümesinin birleşimidir. Hystrix'in iş parçacığı havuzu izolasyon stratejisine biraz benzer.

4 Tek makineli iş akışı görev planlaması

5 Diğer ardışık gereksinimler

Paralel sahnelerin özü-keyfi düzenleme

1 Birden fazla yürütme biriminin seri talebi

Birden çok yürütme birimi için 2 paralel istek

3 Bloklama bekletme, seri ve ardından çoklu paralel

4 Engelleme beklemede, birden fazla paralel yürütme tamamlandıktan sonra belirli bir tanesini yürütün

5 seri paralel bağımlılık

6 Karmaşık sahne

Paralel senaryolar için olası gereksinimlerden biri-her yürütme sonucu için geri çağırmalar

Geleneksel Future ve CompleteableFuture, görev planlamasını belirli bir dereceye kadar tamamlayabilir ve sonucu bir sonraki göreve aktarabilir. Örneğin, CompletableFuture'un bir yöntemi vardır, ancak her yürütme birimini geri arayamaz. Örneğin, A başarılı bir şekilde yürütüldü, ardından B eklendi. Umarım A'nın yürütmeden sonra bir geri arama sonucu alacağını, böylece mevcut yürütme durumunu izleyebilir veya bir günlük oluşturabilirim. Başarısız olursa, bir istisna mesajı veya başka bir şey de kaydedebilirim.

Bu noktada CompleteableFuture güçsüzdür.

Benim çerçevem böyle bir geri arama işlevi sağlar. Ve yürütme anormalse veya zaman aşımına uğradıysa, yürütme birimini tanımlarken varsayılan değeri ayarlayabilirsiniz.

Paralel senaryoların olası gereksinimlerinden biri - yürütme sırasına güçlü ve zayıf bağımlılık

Yukarıdaki Şekil 3'te gösterildiği gibi, A ve B eşzamanlı olarak ve sonunda C'yi çalıştırır.

Bazı senaryolarda, C'nin hem A hem de B yürütüldükten sonra yürütülebileceğini umuyoruz. Bunu yapmak için CompletableFuture'da allOf (futures ...]. Then () yöntemi vardır.

Bazı senaryolarda, A veya B yürütüldükten sonra C'yi yürütmek isteriz. CompletableFuture'da bunu yapabilen anyOf (futures ...). Then () yöntemi vardır.

Çerçevem de benzer işlevler sağlar.Sarmalayıcıda addDepend bağımlılığını ayarlayarak, bağımlı görevin yürütülmesi gerekip gerekmediğini belirtebilirsiniz. Bağımlılık yürütülmesi gereken şeyse, kendisini çalıştırmadan önce tüm bağımlılıkların yürütülmesini beklemesi gerekir.

Bağımlılıkların hiçbiri zorunlu değilse, bağımlılıklardan herhangi biri çalıştırılabilir ve kendiniz çalıştırabilirsiniz.

Not: Bu bağımlılık, gerekli olan ve olmayan olmak üzere ikiye bölünmüştür.Diğer önemli bir şey de yürütme biriminin tekrar tekrar çalıştırılamamasıdır. Örneğin, Şekil 4'te gösterildiği gibi, eğer B yürütülürse ve sonra A çalıştırılırsa, sonunda C çalıştırılır ve sonra A'ya ulaşılır. Şu anda, A'nın zaten yürütülmekte olduğunu veya tamamlandığını (başarısız olduğunu) göreceksiniz, o zaman yürütmeyi tekrar etmemelisiniz A.

Aşağıdaki şekilde gösterildiği gibi başka bir senaryo daha var, A ve D paralel olarak başlar, önce D yürütülür ve Sonuç görevi yürütülür Bu sırada B ve C henüz başlamamış ve sonra Sonuç yürütülmüştür.B ve C yürütülmemiş olmasına rağmen yürütülmüştür. Yürütmeye gerek yok. Görev B ve C atlanabilir. Atlama prensibi, NextWrapper'ın zaten bir sonuca sahip olması veya zaten çalışıyor olmasıdır. Kontrol etmek için checkNextWrapperResult yöntemini sağlıyorum, aşağıdaki görevler yürütüldüğünde, yine de mantık kontrolünü yürütmem gerekiyor. Tabii ki, bu kontrol yalnızca bir nextWrapper ile sınırlıdır.

Giriş parametreleri olarak yukarı akış yürütme sonuçlarına dayanan eşzamanlı senaryolar için olası gereksinimlerden biri

Örneğin, A-B-C'nin üç yürütme birimi vardır. A'nın giriş parametresi String'dir ve çıkış parametresi int'dir. B için, girdi parametresi olarak A'nın sonucunu kullanması gerekir. Diğer bir deyişle, A ve B bağımsız değildir, ancak sonuçlara bağlıdır.

A yürütülmeden önce, B sonucu alamaz, ancak A'nın sonuç türünü bilir.

Benim çerçevem de bu tür senaryoları destekliyor. Yerleşim sırasında B'nin girdi parametresi olarak A'nın sonuç paketleme sınıfını alabilirsiniz. Şu anda çalıştırılmamış olmasına rağmen boş olması gerekir, ancak A yürütüldükten sonra B'nin katılımının atanacağı garanti edilebilir.

Eşzamanlı senaryoların olası ihtiyaçlarından biri - tüm görev grubunun zaman aşımı

Bir grup görev için, her bir dahili yürütme biriminin süresi kontrol edilemez olsa da, tüm grubun yürütme süresini belirli bir değeri aşmayacak şekilde kontrol edebilirim. TimeOut ayarlanarak, tüm grubun yürütme eşiği kontrol edilir.

Eşzamanlı senaryolar için olası gereksinimlerden biri - yüksek performans, düşük iş parçacığı sayısı

Çerçeve baştan sona açılmıştır ve onu kilitleyecek yer yoktur.

Daha az iş parçacığı oluşturun.

Bu şekilde, A, B ve C'nin ek iş parçacıkları oluşturmadan daha yavaş çalıştığı birimin iş parçacığı üzerinde çalışacaktır.

asyncTool özellikleri

Herhangi bir çok iş parçacıklı paralel, seri, engelleme, bağımlılık ve geri arama eşzamanlılık çerçevesini çözün.Her iş parçacığının yürütme sırası, tam bağlantı geri arama ve zaman aşımı kontrolü ile isteğe bağlı olarak birleştirilebilir.

Bunların arasında, A, B ve C sırasıyla minimum bir yürütme birimidir (işçi), bu zaman alıcı bir kod parçası, bir Rpc çağrısı vb. Olabilir ve yaptığınız şeyle sınırlı değildir.

Çerçeve, bu çalışanları istediğiniz çeşitli yürütme emirlerinde birleştirebilir ve düzenleyebilir. Sonunda sonucu aldım.

Ve çerçeve Her çalışan için yürütme başarısızlıklarından sonra yürütme sonuçları için geri aramalar ve özel varsayılan değerler sağlayın . Örneğin, A yürütüldükten sonra, A'nın dinleyicisi, A'nın yürütme sonucuyla (başarı, zaman aşımı, istisna) bir geri arama alacaktır.

İhtiyaçlarınıza göre yürütme birimleri birleştirildikten sonra ana iş parçacığı üzerinde çalışmaya başlar ve sonuncusu çalıştırılana kadar bloklanır. Ve Tüm grup için zaman aşımı süresini ayarlayabilirsiniz .

Çerçeve, önceki yürütme birimlerinin sonuçlarını kendi girdi parametreleri olarak almak için aşağıdaki yürütme birimlerini destekler . Örneğin, yürütme biriminizin B giriş parametresi ResultA ise ve ResultA, A'nın yürütme sonucuysa, bu da desteklenebilir. Düzenlemede, B veya C'nin giriş parametresi, A bu anda henüz çalışmaya başlamamış olsa bile, A'nın sonucu olarak önceden ayarlanabilir. A yürütüldüğünde, sonucu doğal olarak B'nin girdi parametrelerine geçirecektir.

Çerçeve boyunca kilidi açılır.

Açık kaynak dijital para ticareti platformu (Java) / CoinExchange
önceki
Verilerde Tayvan'da çok fazla vaka var, hangileri gerçekten bankalar için geçerli?
Sonraki
Yüce Tanrı, alan odaklı tasarımı üç dakikada anlar
Genel bulut üzerinde mikro hizmet mimarisine dayalı SAAS ürün araştırma ve geliştirme uygulaması
Mikro hizmet mimarisinin kararlılığını ve veri tutarlılığını iyileştirmek için bir yöntem
API ağ geçidi ve SCF'nin derinlemesine entegre uygulaması
Bu şeyin% 30 daha az kod yazmanıza yardımcı olabileceği söyleniyor
Günlük 2 milyar verinin işlenmesi, gerçek zamanlı kullanıcı davranışı hizmet sistemi mimarisi uygulaması
Mobil Taobao mobil terminal erişim ağ geçidi altyapısının evrimi
B2B e-ticaret Yiding'i örnek olarak alın, veri gömme noktalarından ürün yöneticilerinin bakış açısından bahsedin
Netty ve Kafka'daki sıfır kopya teknolojisi ne kadar harika?
Xu Dongdong'un çıplak bir omuz resmi olduğu sürece, çılgınca yayılacak! Straplez kırmızı elbise ile retro örgülü saç, güzel resim
"He Fanxing" in kayınbiraderi aşkıyla karşılaştırıldığında, Song Qian'ın gardırobu benim istediğim şey, ikisinin de uzun bacakları var.
Zhang Tianai balık kuyruğu eteği giyen gerçekten şeytan! Zhuangshan Kendall, retro ve modern oyun tarzıyla hiç kaybetmiyor
To Top