Bağlama bağlı olacaktır.
"İkinci dereceden çalışma zamanı performans hatasını düzeltmek" genellikle gördüğüm şeydir. Ancak, düzeltmeyi (kod değişikliğini) hak edip etmediği bağlama bağlıdır.
Veritabanlarının zaman karmaşıklığını artırmak için birçok araç sağladığını unutmayın. Örneğin, bir veritabanından en iyi N sonucunu almak için şunu söylemeniz yeterlidir. Verimsiz çamuru yerleşik optimize edilmiş aramaya dönüştürürken açıklama gereksiz görünüyor.
Bir kod incelemesini (tartışmayı) hak etmek için ikinci dereceden çalışma zamanına sahip bir algoritmayı dikkate almamın nedeni, yavaş olduğu için (yavaş göreceli; kareli üstel ile karşılaştırıldığında hızlıdır) değil, insan sezgisi (müşterileriniz veya diğer programcılar) günlük yaşamdan beklentilerin karıştırılması nedeniyle doğrusal çalışma süresinden çok farklı bir yazılım işlevselliğinden rahatsız olurlar.
Yazılım performansı ile ilgili birçok müşteri şikayeti bu iki kategoriye girmektedir:
Tüm sistem (yazılım ve donanım) tahmini kullanıma göre belirlenmiştir. Geçen hafta, her şey yolunda gidiyor, belirli bir işlevsellik 5 saniyeden az sürdü. Bu hafta, bir güncelleme yükledikten sonra aynı işlevsellik 1 dakikadan fazla sürüyor.
- Bu, daha önce karşılaştırılmış bir performansla yapılan bir karşılaştırmadır. Müşteri, gelecekteki performansı bir insan zaman ölçeğinin mutlak ölçüsüne sahiptir (saniyelerden dakikaya).
Sisteme 100 iş gönderdim. Tek bir iş için geçen süreye kıyasla neden işlenmesi 400 kat sürüyor?
- Müşteri işlem süresinin doğrusal olmasını beklemektedir. Aslında, müşteri doğrusaldan daha yavaş görevler olduğunu anlayamaz veya kabul edemez.
Bu nedenle, müşteri her ikisi de doğruysa yürütme süresini bir hata olarak değerlendirir:
- Doğrusaldan daha yavaş
- Farkedilir (yani, tipik görev boyutları göz önüne alındığında insan zaman aralığına (saniye veya dakikadan daha uzun) düşer)
İkinci dereceden bir çalışma zamanı algoritmasının sorun oluşturmadığını (yani bir kod değişikliğini hak etmediğini) açıklayan meşru argümanlar:
- Bu ikinci dereceden çalışma zamanı işlevi tarafından işlenen görevin boyutu biraz sınırlıdır
- Tipik boyut aralığı göz önüne alındığında, gerçek (mutlak) yürütme süresi hala reddedilecek kadar küçüktür
- Bir kullanıcı gerçekten farkedilebilecek kadar büyük bir görev göndermeye çalışırsa, kullanıcı uzun çalışma süresi hakkında bir uyarı mesajı alır.
- Sistem kullanıcılarının hepsi uzman, bu yüzden ne yaptıklarını biliyorlar. Örneğin, bir API kullanıcılarının API belgelerindeki ince baskıyı okuması gerekir.
Tipik uygulama geliştirme için yararlı olan birçok algoritma aslında lineerden daha yavaştır (sıralamada olduğu gibi çoğunlukla O (N log N)), bu nedenle büyük ölçekli yazılım aslında, yalnızca ilgili parçayı sıralayarak veya benzer etkiyi sağlayan histogram (istatistiksel) filtreleme tekniklerini kullanın.
Bu, yazılım müşterileri için geçerlidir, ancak bir yazılım kitaplığı veya API işlevinin kullanıcılarının da "müşteriler" olduğunu düşünüyorsanız, yanıt yine de geçerli olacaktır.