Cualquier tecnología de virtualización que esté usando
¿Recuerdas los días en que los sistemas con más de 512 MB de RAM se consideraban de última generación? Me paso los días escribiendo código para el anterior.
Trabajo principalmente en programas de bajo nivel que se ejecutan en el dominio privilegiado en un entorno Xen. Nuestro límite máximo para el dominio privilegiado es de 512 MB, dejando el resto de la RAM libre para que nuestros clientes la utilicen. También es típico que limitemos el dominio privilegiado a un solo núcleo de CPU.
Así que aquí estoy, escribiendo código que se ejecutará en un nuevo servidor de $ 6k, y cada programa tiene que funcionar (idealmente) dentro de un límite máximo asignado de 100kb, o evitar completamente la asignación de memoria dinámica.
De manera concisa, optimizo para:
- Huella de memoria
- Ordena (donde la mayor parte de mi código pasa la mayor parte del tiempo)
También tengo que ser extremadamente diligente cuando se trata de pasar tiempo esperando cerraduras, esperando E / S o simplemente esperando en general. Una gran parte de mi tiempo se destina a mejorar las bibliotecas de sockets no bloqueantes existentes y a buscar métodos más prácticos de programación sin bloqueo.
Todos los días me parece un poco irónico que esté escribiendo un código tal como lo hice hace 15 años, en sistemas que se compraron el mes pasado, debido a los avances tecnológicos.
Esto también es típico para cualquiera que trabaje en plataformas integradas, aunque incluso muchos de ellos tienen al menos 1 GB a su disposición. Como Jason señala, también es típico cuando se escriben programas para ejecutarse en dispositivos móviles. La lista continúa, quioscos, clientes ligeros, marcos de cuadros, etc.
Estoy empezando a pensar que las restricciones de hardware realmente separan a los programadores de las personas que pueden hacer que algo funcione sin importar lo que realmente consuma. Me preocupa (si es necesario, vóteme) qué lenguajes que resumen completamente el tipo y la comprobación de memoria al conjunto colectivo de sentido común que (solía) compartirse entre programadores de diversas disciplinas.