Laboratuvar / Açık yöntem
Java 8 → 25: sipariş entegrasyonunu paralelleştirmek
256 siparişin tamamlanması: 2,95 sn → 380,91 ms. Sentetik laboratuvar; 10 tekrarın medyanı. Kod ve ham veri açık.
Java 8 · sıralı çağrılarşu sistemeJava 25 · sanal iş parçacıkları
Java 8 → 25 LABORATUVAR ÖLÇÜMÜ
Bir sipariş, üç servis. Beklemeleri üst üste koymayın.
Fiyat, stok ve kargo yanıtlarıyla sipariş hazırlama. Aynı sipariş sonucunu sürüm değişikliği ve paralel iş akışıyla ayrı ayrı ölçtük.
Yoğun saatlerde sipariş kuyruğunu daha kısa sürede bitirin. Dış servis beklerken çalışanı meşgul tutan yapı yerine, birbirinden bağımsız işleri birlikte yürütün.
Java 8 · sıralı çağrılar
8 işçi; her siparişin üç bağımsız servisi sırayla beklenir.
- CPU süresi
- 259,207 ms
- Tepe platform iş parçacığı
- 12
Java 25 · aynı eski kod
Aynı bytecode ve aynı 8 işçi. Yalnız çalışma ortamı değişti.
- CPU süresi
- 256,989 ms
- Tepe platform iş parçacığı
- 14
Java 25 · paralel platform kontrolü
Çağrılar paralel; 64 platform işçisi ve 64 dış çağrı sınırı.
- CPU süresi
- 108,114 ms
- Tepe platform iş parçacığı
- 70
Java 25 · sanal iş parçacıkları
Bağımsız çağrılar paralel; aynı 64 dış çağrı sınırı, görev başına virtual thread.
- CPU süresi
- 125,21 ms
- Tepe platform iş parçacığı
- 18
Çubuklar sıfırdan başlar; tüm uygulamalarda aynı süre ölçeği kullanılır.
Sıralı servis çağrılarını ayırıp birlikte başlattık. Java 25 sanal iş parçacıkları bekleyen görevleri az sayıda platform iş parçacığı üzerinde taşıyor. Eşdeğer platform havuzu kontrolü, aynı hızın farklı kaynak yapısıyla da elde edilebildiğini gösteriyor.
Tüm yük noktaları ve ölçüm tablosu
| Uygulama | Medyan süre | CPU süresi | Tepe platform iş parçacığı |
|---|---|---|---|
| Java 8 · sıralı çağrılar | 182,873 ms | 25,94 ms | 12 |
| Java 25 · aynı eski kod | 184,777 ms | 18,021 ms | 14 |
| Java 25 · paralel platform kontrolü | 31,538 ms | 11,909 ms | 70 |
| Java 25 · sanal iş parçacıkları | 31,61 ms | 10,142 ms | 18 |
| Uygulama | Medyan süre | CPU süresi | Tepe platform iş parçacığı |
|---|---|---|---|
| Java 8 · sıralı çağrılar | 729,54 ms | 52,624 ms | 12 |
| Java 25 · aynı eski kod | 725,443 ms | 65,806 ms | 14 |
| Java 25 · paralel platform kontrolü | 97,516 ms | 29,633 ms | 70 |
| Java 25 · sanal iş parçacıkları | 97,451 ms | 42,585 ms | 18 |
| Uygulama | Medyan süre | CPU süresi | Tepe platform iş parçacığı |
|---|---|---|---|
| Java 8 · sıralı çağrılar | 2,95 sn | 259,207 ms | 12 |
| Java 25 · aynı eski kod | 2,93 sn | 256,989 ms | 14 |
| Java 25 · paralel platform kontrolü | 399,298 ms | 108,114 ms | 70 |
| Java 25 · sanal iş parçacıkları | 380,91 ms | 125,21 ms | 18 |
İş yükünüzle CPU maliyeti
Ölçülen işlemci süresini kendi aylık hacminizle karşılaştırın.
Bir çalıştırma = 256 Birlikte gelen sipariş.
Azalan CPU süresi / ay0,3722 saat
İşlem bedeli farkı / ay—Birim bedel girildiğinde hesaplanır.
Laboratuvar CPU süresi × girdiğiniz hacim ve birim bedel. Hosting faturası tahmini değildir; boşta kaynak, ağ, depolama, lisans ve geçiş dahil değil.
Kendiniz deneyin
Kayıtlı laboratuvar sonuçlarını birlikte oynatın.
Ölçek arttığında
İş yüküne göre süre
- Önce
- Sonra
İş yüküne göre süre (ms)
Tablo olarak göster
| Birlikte gelen sipariş | Önce | Sonra |
|---|---|---|
| 16 | 182,87 ms | 31,61 ms |
| 64 | 729,54 ms | 97,45 ms |
| 256 | 2.949,73 ms | 380,91 ms |
Nasıl ölçtük?
Ortam, protokol ve teknik değerlendirme
Ortam ve veri
- Ortam
- Apple M3 · 8 çekirdek · 24 GiB · macOS · native arm64 · paylaşılan geliştirme makinesi
- Veri seti
- Üç bağımsız servis çağrısı gerektiren 16/64/256 sentetik sipariş. Her tam sonuç dizisi bağımsız Python hesabıyla aynı.
- Araçlar
- Corretto 8u432 · Corretto 25.0.3 · -Xms128m -Xmx128m -XX:+UseG1GC · Python output oracle
- Tekrarlar
- 140 taze JVM koşusu: 3 yük × 4 uygulama × 10 tekrar + 20 dar servis kontrolü. En az 2 sn ısınma, sabit rastgele sıra.
Bir sipariş, üç servis. Beklemeleri üst üste koymayın.
Fiyat, stok ve kargo yanıtlarıyla sipariş hazırlama. Aynı sipariş sonucunu sürüm değişikliği ve paralel iş akışıyla ayrı ayrı ölçtük.
Aynı Java 8 bytecode’u iki JDK üzerinde; aynı sentetik iş sonucu ve aynı dış servis. Sıralı 8 işçili kol, Java 25 runtime kontrolü ve eşdeğer 64 eşzamanlı platform/virtual kolları. İkincil kontrolde servis kapasitesi 8; tüm 140 koşu yayımlanır. Son nokta 256 sipariş deneyden önce seçildi. Süre bütün kuyruğun tamamlanmasıdır; platform iş parçacığı toplamı ThreadMXBean tepe değerinin medyanıdır.
Ölçüm betiğini inceleyin ↗İşinize ne kazandırır?
Yoğun saatlerde sipariş kuyruğunu daha kısa sürede bitirin. Dış servis beklerken çalışanı meşgul tutan yapı yerine, birbirinden bağımsız işleri birlikte yürütün.
Değişiklik ve kapsam
Sıralı servis çağrılarını ayırıp birlikte başlattık. Java 25 sanal iş parçacıkları bekleyen görevleri az sayıda platform iş parçacığı üzerinde taşıyor. Eşdeğer platform havuzu kontrolü, aynı hızın farklı kaynak yapısıyla da elde edilebildiğini gösteriyor.
Sentetik sipariş iş akışı; gerçek loopback TCP çağrıları. Servis başına 25 ms ortak bekleme modeli ve 64 çağrı kapasitesi. Sayı, aynı anda verilen sipariş adedidir; canlı kullanıcı sayısı değildir. CPU yalnız istemci JVM; platform iş parçacığı sayısı sanal görevleri içermez.
Dış servis de kapasite ister
Servis kapasitesini 8 eşzamanlı çağrıya indirdiğimiz kontrolü de çalıştırdık: 256 sipariş, eski kolda 2936.0 ms ve sanal iş parçacıklı kolda 2777.3 ms. Darboğaz karşı servise taşındığında yalnız uygulama tarafını paralelleştirmek yetmez. Bu kontrol dahil bütün sonuçlar ham pakette.
Java 8’den sonraki hangi imkânları değerlendiriyoruz?
| İmkân | İş karşılığı | Bu deneyle ilişkisi |
|---|---|---|
| Virtual threads · Java 21 | Entegrasyon cevabı bekleyen çok sayıda işi daha az platform iş parçacığıyla yürütmek | Paralel platform kontrolüyle birlikte ölçüldü |
| synchronized pinning iyileştirmesi · Java 24 | Kilit içindeyken I/O bekleyen sanal görevlerin taşıyıcı thread’i tutmasını azaltmak | Uygulama keşfinde kontrol edilir; buradaki hız oranı buna bağlanmaz |
| Compact Strings · Java 9 | Uygun metin ağırlıklı veride daha küçük String belleği | Ayrı heap profiliyle değerlendirilir; bu deneyin ölçümü değil |
| Güncel JDK ve bağımlılık bakım hattı | Yama, gözlemleme ve dağıtım süreçlerini sürdürülebilir kılmak | Güvenlik bulgusu ve üretim uyumluluğu proje keşfinde sınanır |
Önceki aynı-bytecode CPU deneyi de erişilebilir. O deney farklı bir soruyu yanıtlar: aynı CPU işinde yalnız runtime değişince ne olur?
Kendi sisteminizde başlangıç
En çok bekleten işlemi, veri miktarını ve yoğun saatleri birlikte belirleyelim. Önce bu işin baz ölçümünü alır, sonra kodu ve erişim biçimini değiştirip aynı sonucu karşılaştırırız.
Ne yaptık?
İş kuralı ve veri
YZSentetik iş akışı, testler ve ölçüm otomasyonu hazırlandı.
DoğrulamaYayınlanan kod ve ham sonuçlar incelemeye açıktır; müşteri projesi değildir.
Uygulama değişikliği
YZSıralı servis çağrılarını ayırıp birlikte başlattık. Java 25 sanal iş parçacıkları bekleyen görevleri az sayıda platform iş parçacığı üzerinde taşıyor. Eşdeğer platform havuzu kontrolü, aynı hızın farklı kaynak yapısıyla da elde edilebildiğini gösteriyor.
DoğrulamaÇıktı eşitliği bağımsız kontrolle doğrulandı; bütün tekrarlar pakette tutuldu.