while (condition) {
...
}
İş akışı:
- durumu kontrol edin;
- yanlış ise döngünün dışına atlayın;
- bir yineleme çalıştırın;
- üste atla.
if (condition) do {
...
} while (condition);
İş akışı:
- durumu kontrol edin;
- yanlışsa, döngünün ötesine atlayın;
- bir yineleme çalıştırın;
- durumu kontrol edin;
- doğruysa 3. adıma atlayın.
Bu ikisini karşılaştırdığınızda, döngüde tam olarak bir adım olması koşuluyla ikincisinin hiç atlama yapmayabileceğini kolayca görebilirsiniz ve genellikle atlama sayısı yineleme sayısından bir az olacaktır. İlki, koşulu kontrol etmek için geri atlamak zorunda kalacak, yalnızca koşul yanlış olduğunda döngüden atlamak zorunda kalacak.
Modern ardışık düzen CPU mimarilerinde sıçramalar oldukça pahalı olabilir: CPU, atlamadan önce kontrollerin yürütülmesini bitirirken, bu atlamanın ötesindeki talimatlar zaten ardışık düzenin ortasındadır. Şube tahmini başarısız olursa, tüm bu işlemler atılmalıdır. Boru hattı cezalandırılırken daha fazla yürütme ertelenir.
Bahsedilen dal tahminini açıklamak : her tür koşullu sıçrama için CPU'nun her biri sonuca ilişkin bir bahis içeren iki talimatı vardır . Örneğin, bir döngünün sonuna " sıfır değilse zıpla, sıfır değil üzerine bahis yap " diyen bir talimat koyarsınız , çünkü atlama sonuncusu hariç tüm yinelemelerde yapılmalıdır. Bu şekilde CPU, atlama komutunun kendisini izleyenler yerine atlama hedefini izleyen talimatlarla işlem hattını pompalamaya başlar.
Önemli Not
Lütfen değil kaynak kodu düzeyinde nasıl optimize bir örnek olarak alın. Bu tamamen yanlış olacaktır çünkü, sorunuzdan da anlaşılacağı üzere, ilk formdan ikinciye dönüşüm, JIT derleyicisinin tamamen kendi başına rutin olarak yaptığı bir şeydir.