All Analyzed Sites - 26.3M

fiftyonedogs.com
2237 days ago
szkukong.com
2237 days ago
11选5玩法
przbx.com
2237 days ago
marstonmarryott.com
2237 days ago
Home | Main Pro
allegato2.com
2237 days ago
mommybag.fun
2237 days ago
Landscape Design Profit Systems | Landscape Archietchs Profit System For Getting More Phone Calls
landscapeprofitsystems.com
2237 days ago
S'moo - All in One Smoothie Boost for Hormone Health
buysmoo.com
2237 days ago
Maui Spa
heavenlyspa-maui.com
Heavenly Spa by Westin, where the ocean, heaven and healing meet.
2237 days ago
South African Plains Game Safari's – Experiences You Will Not Ever Forget
plainsgamesafari.com
2237 days ago
Ponbird下載
ponbird.com
2237 days ago
RAPRO
rapromobileapp.com
Property Management.
2237 days ago
snackclubmx.com
2237 days ago
ledongsports43.com
2237 days ago
Redner Photography – Photographer in the Hudson Valley
rednerphotography.com
2237 days ago
没有找到站点
weitaikeji.top
2237 days ago
aeioudesigns.com
2237 days ago
Gulfport MS Homes and Real Estate - CENTURY 21 J. Carter & Company
shealeyfreemanhomes.com
CENTURY 21 J. Carter & Company will help you find a home in Gulfport. Contact us Today.
2237 days ago
sbncbd.com
2237 days ago
Home - Therapist San Francisco
therapist-sanfrancisco.net
Therapist San Francisco, psychotherapist san francisco, EFT san francisco, mindfulness san francisco
2237 days ago
Not Available
cedrickdavidspotless.com
2237 days ago
wewanttherealdeal.com - wewanttherealdeal Resources and Information.
wewanttherealdeal.com
2237 days ago
chintraditionalclothing.com
2237 days ago
LALA ART GALLERY & CAFE
lalagalleryandcafe.com
2237 days ago
NEWS! H2 - www.sudenclarissa.com
sudenclarissa.com
H2 Think Technology - https://www.sudenclarissa.com/
2237 days ago
estrenosgratis.xyz
2237 days ago
neurosolo.com
2237 days ago
hyenamoney.com
2237 days ago
pastryvoice.net
2237 days ago
Welcome artashopping.com - BlueHost.com
artashopping.com
2237 days ago
天天彩票平台_官方开奖网站
yaonilu.com
天天彩票平台于2012年成立,专业经营重庆时时彩、北京赛车PK10等热门高频彩票游戏,提供各种彩票服务,注册即送惊喜彩金礼包,天天彩票平台拥有全网最完善的支付渠道。
2237 days ago
天天彩票平台_官方开奖网站
ihxjjuh.com
天天彩票平台于2012年成立,专业经营重庆时时彩、北京赛车PK10等热门高频彩票游戏,提供各种彩票服务,注册即送惊喜彩金礼包,天天彩票平台拥有全网最完善的支付渠道。
2237 days ago
​Unique Nutritional Supplements For Birds - Naturally for Birds
naturallyforbirds.com.au
Naturally for Birds
2237 days ago
michaelmarshall.dev
2237 days ago
shadyside9.net
2237 days ago
srljsa.services
2237 days ago
ocartsource.org
2237 days ago
Index - neko.dev
neko.dev
2237 days ago
illumipress.com – Just another WordPress site
illumipress.com
2237 days ago
插妺妺 视频-王者色.com
677199.xyz
插妺妺 视频分享全球王者色.com在线免费视频在线观看网站,每日适度的在线观看插妺妺 视频,插庇视频,偷伯自怕第13页等服务是不错的!
2237 days ago
Account Login
gwbdriverapp.com
2237 days ago
STRATO - Domain reserved
kas-medialuna.com
2237 days ago
kinderwunsch-potsdam.com
2237 days ago
Nerds Who Swing – A Swinger Lifestyle podcast hosted by nerds Margo & Miller. One is a Writer & one is ***, both are Swingers. Follow their *** journey.
nerdswhoswing.com
2237 days ago
mytoll.com.au
mytoll.com.au
2237 days ago
長崎県でバイク廃車※詳しくはこちら
trust-motherly.xyz
長崎県でバイク廃車の目からうろこ情報。ニュースです。
2237 days ago
lastbyte.dev
2237 days ago
الصفحة الرئيسية - Amal, Berlin!
amal.berlin
2237 days ago
Bahadır AKIN | Tecrübe ihtiyacınız geçtikten sonra edinilir
bahadirakin.dev
Mikro servislerin kullanımı arttıkça, bloklanmış bir threadin etkilerini de daha fazla hissetmeye başladık. Fakat bu etkiyi azaltmanın yolları mevcut ve bu yollardan biri de asenkron ve baştan sonra bloklanmayan servisler yazmak. Bu yazıda elimden geldiğince asenkron servislerin yararlarından ve baştan sona asenkron bir servisin nasıl geliştirilebileceğinden (kısaca) bahsedeceğim. Asenkron vs Senkron Öncelikle asenkton ya da senkron derken neyi kastettiğimi bir örnek üzerinden anlatalım. Mesela, socket üzerinden byte array olarak gönderilen cümleleri okuyup String'e çeviren ve sonrasında da ekrana yazdıran bir uygulama geliştirdiğimizi varsayalım. Tabiki bunu bir çok şekilde yapabilirsiniz ama ben iki türüne odaklanmak istiyorum. İlk uygulamamızda, uygulamamızı çalıştıran ana thread gider socketi açar ve veriyi beklemeye başlar. Veri alışını tamamladıktan sonra veriyi String'e çevirir ve ekrana yazdırır. Burada ana threadimiz veri gelene kadar bloklanmış bir şekilde bekleyecektir. İkinci yöntem ise, uygulamanızı çalıştırırsınız, uygulamanız gider soketi açar fakat socketi açarken, veri geldiğinde çalışmasını istediği fonksiyonu da belirtir. Bundan sonra ana threadiniz veri gelene kadar özgürdür ve başka işler için kullanılabilir, yani bloklanmaz. Peki asenkron ve senkron kavramları nerede devreye giriyor? Tahmin edebileceğiniz gibi ilk örnek senkron olarak tasarlanabilir. Yani tüm işlemler aynı thread üzerinde yapılabilir. İkinci örnek ise kolaylıkla asenkron hale getirilebilir ve socketten bilgiyi alacak fonksiyon ayrı bir thread üzerinde, String'e çeviren ayrı bir threadte ve ekrana basma işlemi yine ayrı bir thread üzerinde tanımlanabilir. İsterseniz tam tersini, ilk örneği asenkron ikinci örneği senkron yapmayı da deneyebilirsiniz ama bu sadece işinizi zorlaştıracaktır. Aynı örnek üzerinden devam edecek olursak, asenkron ya da senkron olmasının ne gibi farkları olabilir biraz bunlara bakalım. İki farklı uygulamamıza socket üzerinden kimi daha uzun kimi daha kısa şekilde farklı farklı cümleler geliyor. Senkron olan uygulamamızda, tüm cümleler sockete yazıldıkları şekilde ekrana basılacaktır fakat asenkron olan uygulamamızda, kısa bir cümle kendinden önce gönderilmiş uzun bir cümleden önce ekrana yazılabilir. (Tabi String'e çevirme işleminin cümle uzunluğuna bağlı olarak çok daha uzun süreceğini varsayıyorum.) Yani asenkron uygulamamız cümle uzunluğunun doğurabileceği sorunlardan/gecikmelerden daha az etkilenecektir. Doğal olarak eğer ekranı okuyan bir kullanıcılarınız varsa, sadece uzun cümleyi bekleyen kullanıcınız etkilenecektir. Tabi eğer cümlelerin sırasının korunması gibi bir gereksiniminiz varsa asenkron uygulamanızın başka işlemler de yapması gerekecektir. Performans açısından baktığımızda, bu durum genelde asenkron olan uygulamanın cümleleri daha hızlı çevirdiği gibi bir algı oluşturuyor. Fakat yapacağınız işlem değişmediğinden asenkron bir yapı birim çevirme hızınızı değiştirmeyecektir. Örneğin senkron uygulamanız bir veriyi okuyup, String'e çevirip ekrana ortalama 5 ms'de basıyorsa, asenkron uygulamanızda da bu 5 ms'e sürecektir. Fakat asenkron uygulamanız CPU'yu daha verimli kullanacağından ekrana daha fazla cümle (throughput) yazdırabilirsiniz. Örneğin senkron uygulamanız saniyede ekrana 200 cümle yazdırabiliyorsa, asenkron uygulamanız saniyede 1800 cümle yazdırabilir. Asenkron yapıların diğer bir yararı da uygulamızın kabul edebileceği bağlantı sayısını arttırmasıdır. Bağlantıyı kabul eden threadlerin de aynı mantıkla çalışacağını düşünürseniz bu sizi şaşırtmayacaktır. Bağlantıyı kabul eden thread, talebi içerideki başka bir thread havuzuna iletecek ve sıradaki bağlantıyı kabul etmeye başlayabilecektir. Peki herşey bu kadar güzelse neden tüm uygulamalar asenkron olarak yazılmıyor? Çünkü yazdığınız uygulamanızın gereklilikleri asenkron uygulamanızdan alacağınız yararı arttırıp azaltabilir. Az önceki örnekteki gibi IO yoğun işlemler yapan bir uygulama geliştiriyorsanız, bloklanmayan yapılardan daha fazla yarar sağlayacaksınızdır fakat bunun tersi olarak CPU yoğun bir uygulamanız varsa asenkron yapıdan sağlayacağınız yarar azalacaktır. Bunun yanı sıra, asenkron yapının geliştirmesi ve testi de senkron bir yapıya göre daha zor olduğundan, senkron bir yapı daha çok tercih edilebiliyor. Tüm bu avantajlarını ve dezavantajlarını göz önüne aldığımızda, bloklanmayan yapıların mikro servisler için ne kadar önemli olduğunu görüyoruz. Bir mikro servis mimarisinde, çoğu servis başka bir servisi tüketmekte (IO) ve tükettiği servis üzerine küçük bir birimlik iş yapmaktadır. Yani, gerçekten mikro servislerle oluşturulmuş bir uygulamada asenkron yapının getirdiği faydalardan sonuna kadar yararlanabiliriz. Bu arada, büyük şirketler de yavaş yavaş bu yapıya geçiyorlar. Örneği Netflix'in bununla ilgili çok güzel bir yazısına şurdan ulaşabilirsiniz. Canlı ortamlarını bloklanmayan yapıya geçirdiklerinde deneyimledikleri yararlardan bahsediyorlar. Örnek Proje Spring Boot, Spring MVC ve Java 8 kullanarak, nasıl bir bloklanmayan servis geliştireceğimize bakalım. Ben örnek olması açısından HttpBin servisini tüketeceğim. HttpBin bize bir ip servisi sunuyor. Bu ip servisinden dış ip'nizi öğrenebiliyorsunuz. Yazacağımız servis ise sadece bu servisi çağırıp sonucu bize dönecek. Projenin Yaratılması Intellij'de Spring Initializer ya da start.spring.io kullanarak Spring Boot projemizi yaratıyoruz. Ben aşağıdaki bilgilerle yarattım, siz istediğiniz şekilde yaratabilirsiniz. Proje Adı: jdk8-async-mvc Group Id: com.bahadirakin Artifact Id: jdk8-async-mvc Package Name: com.bahadirakin HttpBin Entegrasyonu Öncelikle HttpBin ile entegre olalım. Ben istemci için Retrofit kullanacağım. Bunun bir kaç sebebi var: Java 8 ile gelen CompletableFuture'ı destekliyor. Bir çok Java kütüphanesiyle güzel bir şekilde entegre olabiliyor. Mesela JSON dönüşümü için ister GSON kullanın ister Jackson kullanın. Spring MVC ile birlikte Jackson geldiğinden ben Jackson kullanacağım. Interface üzerinden istemci oluşturabiliyorsunuz. Eğer Spring'in RestTemplate'ini kullanacak olsam çoğru şeyi kendim halletmem gerekecek. Retrofit'te ise interface geliştirip doğruca istemciye dönüştürebiliyorum. Öncelikle maven bağımlılıklarımızı ekleyelim: pom.xml [crayon-5d164465d99b4757792123/] HttpBin'in Ip servisi bize şu şekilde JSON'lar dönüyor. [crayon-5d164465d99c0803642805/] Şimdi bunu dönüştüreceğimiz modelimizi/DTOmuzu oluşturalım. Bunun için com.bahadirakin.model paketinin altına Ip isminde bir sınıf yaratıyoruz. İçeriği aşağıdaki gibi olacak. Ip.java [crayon-5d164465d99c6632893454/] Modelimizi yarattığımıza göre, şimdi de Interface'imizi yaratalım. Bunun için com.bahadirakin.service paketinin altına HttpBinService isminde bir interface yaratıyoruz. HttpBinService.java [crayon-5d164465d99cb128779723/] Son olarak, entegrasyonumuzun son halkasını yapıyoruz. Bu interface sınıfından istemcimizi oluşturacağız. Bunun için bir com.bahadirakin paketinin altına ClientConfiguration sınıfını oluşturuyoruz. ClientConfiguration.java [crayon-5d164465d99d0912940779/] Burada dikkat etmenizi istediğim bir kaç nokta var. Sadece bir istemci yaratıyor olabiliriz ama birden fazla thread pool ayarlaması yapıyoruz. Bunlardan biri bağlantılar için. Diğeri ise asenkron çalıştıracağımız metodlar için. Socket örneğinde olduğu gibi, istemcimize fonksiyon vereceğiz. İstemcimiz ise bu fonksiyonu "clientCallbackExecutor" içerisinde çalıştıracak IpController Entegrasyonu tamamladığımıza göre kendi Controller'ımızı yazabiliriz. Bunun için bir com.bahadirakin.control
2237 days ago
Under Construction | Service Limousine | HOME
endinheirando.com
2237 days ago