PHP Bellek Yönetimi

Wasee

Kalfa
25 Eki 2020
53
2
0
Merhabalar bugün sizlere phpnin bellek yönetimi mantığını anlatacağım.

Bu Konu İçerisinde 3 yan başlığımız var.

- Temel Bellek Yönetimi
- Veri Kalıcılığı
-İş Parçacığı Güvenli Kaynak Yöneticisi

Haydi başlayalım.

Dipnot : Bu Konu php ile ilgilenenler içindir eğer php öğrenmek için hevesiniz yoksa okumayınız.


1 - Temel Bellek Yönetimi

Motorun bellek yönetimi, PHP gibi bir sistem için önemli olan özelliklerle uygulanır. Motorun bellek yönetiminin tam işlevselliği ve gerçekleştirilen optimizasyonlar bu belgenin kapsamı dışındadır. Bununla birlikte, işlevselliğinin iyi anlaşılması, Hacker Rehberinin geri kalanının iyi anlaşılması için bir temel sağlar ve size PHP'de kullanılan terminoloji ve işlevselliği sunar.

Hacker için özelliklerinden en önemlisi ve ilk bahsedilmesi gereken şey, tahsisleri takip etmektir. İzleme tahsisleri, bellek yöneticisinin sızıntıları önlemesine izin verir, bu da çoğu Hacker'ın yanında bir dikendir. PHP hata ayıklama modunda (--enable-debug) kurulduğunda, tespit edilen sızıntılar rapor edilir, dünyada asla devreye alınamazlar.

Tahsisleri izlemek önemli ve oldukça kullanışlı bir özellik olsa da, Hacker tembelleşmemelidir! Kodunuzu dağıtmadan önce daima sızıntıları çözmeye çalışın, SAPI ortamındaki bir bellek sızıntısı çok hızlı bir şekilde çok büyük bir soruna dönüşebilir.

Belki daha tesadüfi ama yine de kayda değer olan bir diğer özellik, bellek yöneticisinin her PHP örneği için bellek kullanımında katı bir sınırlama sağlayan bölüm olmasıdır. Hepimizin bildiği gibi sınırsız diye bir şey yoktur. Bir kodun hafızası bitiyorsa, ya Hacker ya da PHP programcısı tarafından yanlış yazılması muhtemeldir. Bu nedenle hafızayı sınırlamak, üretimde deneyimlenmesi gereken dil üzerinde bir kısıtlama değildir, sadece geliştirme ortamlarının hata yapıldığında ve aynı şekilde üretimde hatalar bulunduğunda kontrolden çıkmasını engellemenin bir yoludur.



2 - Veri Kalıcılığı


Bu bağlamda, veri kalıcılığı, mevcut talepten sağ çıkması amaçlanan herhangi bir veri anlamına gelir. Motor içindeki bellek yönetimi, isteğe bağlı tahsislere çok odaklanmıştır, ancak bu her zaman pratik veya uygun değildir. Dış kitaplıkların gereksinimlerini karşılamak için bazen kalıcı bellek gereklidir, Hacking sırasında da faydalı olabilir. Kalıcı belleğin yaygın bir kullanımı, kalıcı SQL sunucu bağlantılarını sağlamaktır, ancak bu uygulama hoş karşılanmasa da, bu özelliğin en yaygın kullanımı da değildir.

3- İş Parçacığı Güvenli Kaynak Yöneticisi

Yukarıdaki kod parçası, bir uzantı yazarının genel erişimcilerini nasıl tanımlaması gerektiğini gösterir. TSRMG makrosu bir tanımlayıcı, tür ataması ve eleman adı alır. Tanımlayıcı, modülün başlatılması sırasında TSRM tarafından atanır. Global erişimcilerin bu şekilde bildirilmesi, bir uzantının aynı mantığı kullanarak İş Parçacığı Güvenli ve İş Parçacığı Güvenli Olmayan mimaride güvenli bir şekilde çalışabilmesini sağlar.

TSRM, yürütme globallerinden genişleme globallerine kadar PHP içindeki tüm global yapıların izolasyonunu ve güvenliğini yönetir, izole edilmiş depolamaya bir işaretçi de API işlevlerinin çoğunda veya çoğunda iletilir. TSRMLS_C ve TSRMLS_CC makroları sırasıyla "iş parçacığı güvenli yerel depolama" ve "virgül ile ön ekli iş parçacığı güvenli yerel depolama" olarak tercüme edilir.

Bir işlev TSRM'ye bir işaretçi gerektiriyorsa, prototipinde TSRMLS_D veya TSRMLS_DC makrosu ile bildirilir, bu da sırasıyla "yalnızca iş parçacığı güvenli yerel depolama" ve "virgülle ön ekli iş parçacığı güvenli yerel depolama" anlamına gelir. Motor içindeki birçok makro TSRM'ye başvurmaktadır, bu nedenle çoğu şeyi TSRM'yi kabul etmek için beyan etmek iyi bir fikirdir, öyle ki TSRM'yi çağırmaları gerekiyorsa, yürütme sırasında bir işaretçi getirmeleri gerekmez.

TSRM iş parçacığı yerel olduğundan ve bazı işlevler (uyumluluk nedenleriyle) doğrudan TSRM'yi kabul edemediğinden, TSRMLS_FETCH makrosu vardır ve bu TSRM'nin işaretçiyi iş parçacığı yerel deposuna getirmesini ister. Bu, mümkün olan her yerde önlenmelidir, çünkü bir İş Parçacığı Güvenli kurulumda maliyetsiz değildir