Bilgisayar Bilimi öğrencisiyim ve programlar ve türler söz konusu olduğunda "tepegöz" kelimesini çok duyuyorum. Bu tam olarak ne anlama geliyor?
Bilgisayar Bilimi öğrencisiyim ve programlar ve türler söz konusu olduğunda "tepegöz" kelimesini çok duyuyorum. Bu tam olarak ne anlama geliyor?
Yanıtlar:
Bir işlem kurmak için gereken kaynaklardır. İlgisiz görünebilir, ancak gerekli olabilir.
Bir yere gitmeniz gerektiğinde, bir arabaya ihtiyacınız olabilir. Ancak, caddeden aşağı araba sürmek için çok fazla yük olurdu, bu yüzden yürümek isteyebilirsiniz. Ancak, ülke genelinde gidiyor olsaydı yükü buna değer olurdu.
Bilgisayar bilimlerinde bazen arabaları caddeden aşağı inmek için kullanırız çünkü daha iyi bir yolumuz yoktur ya da “nasıl yürümeyi öğreneceğimize” değmez.
Kelimenin anlamı bağlamla çok farklı olabilir. Genel olarak, amaçlanan sonuca doğrudan katkıda bulunmayan, ancak kullanılan teknoloji veya yöntem için gerekli olan kaynaklar (çoğunlukla bellek ve CPU zamanı) kullanılır. Örnekler:
malloc
, blok boyutu artı koruma değerlerinden oluşan ayırıcı (klasik 32 bit makine olduğu varsayılır) nedeniyle 8 baytlık yerleşik bir yükü vardır. Ve bu, tahsis ayrıntı düzeyini bile düşünmeden önce. Tek bir bağlantılı basit 4 bayt tam sayı listesi bu nedenle% 75'lik bir ek yüke sahip olacaktır; diziler çok daha iyidir (ortada hızlı yerleştirme gerekmedikçe), ek yükü bir kez (veya dizi dinamik olarak tahsis edilmemişse) daha az olabilirler.
Yorgunsun ve daha fazla iş yapamazsın. Sen yemek yersin. Yiyecek aramak, almak ve aslında yemek yemek için harcanan enerji, enerji tüketir ve havai olur!
Genel gider, bir görevi yerine getirmek için boşa giden bir şeydir. Amaç, yükü çok küçük yapmaktır.
Bilgisayar bilimlerinde bir sayı yazdırmak istediğinizi varsayalım, bu sizin göreviniz. Ancak sayıyı saklamak, ekranı yazdırmak için ayarlamak ve yazdırmak için rutinleri çağırmak, sonra değişkenten sayıya erişmek tamamen ek yüktür.
Vikipedi bizi ele aldı :
Bilgisayar bilimlerinde genel gider , genellikle belirli bir hedefe ulaşmak için gereken fazla veya dolaylı hesaplama süresi, bellek, bant genişliği veya diğer kaynakların herhangi bir kombinasyonu olarak kabul edilir. Özel bir mühendislik yükü durumudur.
Genel gider genellikle farklı programlama algoritmalarının kullandığı fazladan kaynak miktarını (bellek, işlemci, zaman vb.) Belirtir.
Örneğin, dengeli bir İkili Ağaca ekleme yükü, basit bir Bağlantılı Listeye aynı kesici uçtan çok daha büyük olabilir (kesici uç daha uzun sürer, Ağacı dengelemek için daha fazla işlem gücü kullanır, bu da daha uzun süre algılanan çalışma süresine neden olur. Kullanıcı).
Bir programcı yükü, belirli bir girdi verisi kümesi üzerinde bir platformda çalışırken kodunuz tarafından tüketilen sistem kaynaklarını ifade eder. Genellikle terim, farklı uygulamaları veya olası uygulamaları karşılaştırma bağlamında kullanılır.
Örneğin, belirli bir yaklaşımın ciddi CPU yükü oluşturabileceğini söyleyebiliriz, bir başkası daha fazla bellek yüküne neden olabilir ve yine de bir başkası ağ yüküne ağırlık verebilir (ve örneğin harici bir bağımlılık gerektirebilir).
Belirli bir örnek verelim: Bir sayı kümesinin ortalamasını (aritmetik ortalama) hesaplayın.
Bariz yaklaşım, toplamı ve sayıyı koruyarak girişler üzerinde döngü yapmaktır. Son sayı ile karşılaşıldığında ("dosya sonu" EOF veya bazı sentinel değeri veya bazı GUI düğmeleriyle sinyal verilir), toplamı girdi sayısına böleriz ve işimiz biter.
Bu yaklaşım CPU, bellek veya diğer kaynaklar açısından neredeyse hiç yük oluşturmaz. (Bu önemsiz bir görev).
Başka bir olası yaklaşım, girdiyi bir listeye "kaydırmak" tır. toplamı hesaplamak için liste üzerinde tekrarlayın, ardından listeden geçerli öğe sayısına bölün.
Karşılaştırıldığında, bu yaklaşım keyfi bellek yüküne neden olabilir.
Belirli bir kötü uygulamada, toplama işlemini özyineleme kullanarak ancak kuyruk eliminasyonu olmadan gerçekleştirebiliriz. Şimdi, listemiz için bellek ek yüküne ek olarak, yığın ek yükü de sunuyoruz (bu, farklı bir bellek türüdür ve genellikle diğer bellek türlerinden daha sınırlı bir kaynaktır).
Yine başka bir (tartışmasız daha saçma) yaklaşım, tüm girdileri bir RDBMS'deki bazı SQL tablolarına göndermek olacaktır. Sonra bu tablonun sütununda SQL TOPLA işlevini çağırmanız yeterlidir. Bu, yerel bellek ek yükümüzü başka bir sunucuya kaydırır ve yürütme ağ yükü ve harici bağımlılıklara neden olur. (Uzak sunucunun bu görevle ilişkili belirli bir bellek ek yükü olabileceğini veya olmayabileceğini unutmayın. Örneğin, tüm değerleri hemen depoya atabilir).
Varsayımsal olarak bir tür küme üzerinde bir uygulamayı düşünebilir (muhtemelen trilyonlarca değerin ortalamasını mümkün kılar). Bu durumda, değerlerin gerekli kodlanması ve dağıtımı (düğümlerle eşleştirilmesi) ve sonuçların toplanması / harmanlanması (azaltma) ek yük olarak sayılır.
Programcının kendi kodunun ötesindeki faktörlerin neden olduğu ek yük hakkında da konuşabiliriz. Örneğin, 32 veya 64 bit işlemciler için bazı kodların derlenmesi, eski 8 bit veya 16 bit mimari için göreceğinden daha fazla ek yük gerektirebilir. Bu, daha büyük bellek ek yükü (hizalama sorunları) veya CPU ek yükü (CPU'nun bit sırasını ayarlamak zorunda kaldığı veya hizalanmamış talimatlar vb.) Veya her ikisini içerebilir.
Kodunuz ve kütüphaneleri vb. Tarafından kullanılan disk alanına genellikle "tepegöz", daha çok "kapladığı alan" denir. Ayrıca programınızın kullandığı temel belleğe (işlediği veri kümesine bakılmaksızın) "kapladığı alan" da denir.
Genel gider, programın yürütülmesinde daha fazla zaman harcanmasıdır. Misal ; bir fonksiyonu çağırdığımızda ve onun kontrolü tanımlandığı yerden geçtiğinde ve daha sonra gövdesi yürütüldüğünde, CPU'muzun uzun bir süreçten geçmesini sağlıyoruz (önce kontrolü hafızadaki başka bir yere geçirip sonra orada çalıştırıyoruz ve sonra kontrolün eski konumuna geri döndürülmesi), sonuç olarak çok fazla performans süresi, dolayısıyla Tepegöz alır. Hedeflerimiz, işlev tanımlaması ve işlev çağrısı sırasında satır içi işlevini kullanarak bu ek yükü azaltmaktır; bu işlev, işlev çağrısında işlevin içeriğini kopyalar, bu nedenle kontrolü başka bir konuma geçirmiyoruz, ancak programımızı bir satırda sürdürüyoruz, dolayısıyla satır içi .
Bir sözlük kullanabilirsiniz. Tanım aynıdır. Ancak size zaman kazandırmak için, Tepegöz üretken işi yapmak için gereken iştir. Örneğin, bir algoritma çalışır ve yararlı bir iş yapar, ancak işini yapmak için bellek gerektirir. Bu bellek ayırma işlemi zaman alır ve yapılan işle doğrudan ilişkili değildir, bu nedenle ek yüktür.
Wikipedia'yı kontrol edebilirsiniz . Ancak esas olarak daha fazla eylem veya kaynak kullanıldığında. .NET'e aşinaysanız, değer türlerine ve referans türlerine sahip olabilirsiniz. Referans türlerinde, değer türlerinden daha fazla bellek gerektiğinden bellek ek yükü bulunur.
Genel giderlerin somut bir örneği, "yerel" prosedür çağrısı ile "uzak" prosedür çağrısı arasındaki farktır.
Örneğin, klasik RPC (ve EJB gibi diğer birçok uzak çerçeve) ile, bir işlev veya yöntem çağrısı, ister yerel, ister bellek çağrısında, ister dağıtılmış bir ağ çağrısında olsun, bir kodlayıcıyla aynı görünür.
Örneğin:
service.function(param1, param2);
Bu normal bir yöntem mi yoksa uzak bir yöntem mi? Burada gördüğünüz şeyden anlatamazsınız.
Ancak, iki çağrı arasındaki yürütme sürelerindeki farkın dramatik olduğunu hayal edebilirsiniz.
Dolayısıyla, çekirdek uygulama "aynı maliyete" sahip olsa da, ilgili "genel gider" oldukça farklıdır.
Ek yükü, iş parçacıklarını yönetmek ve aralarında koordinasyon sağlamak için gereken zaman olarak düşünün. İş parçacığının yapacak yeterli görevi yoksa bu bir yüktür. Böyle bir durumda genel maliyet, iş parçacığı kullanılarak kaydedilen zaman gelir ve kod sıralı olandan daha fazla zaman alır.
tcp bayrakları, başlıklar, crc, fcs vb.