Soy un estudiante de Ciencias de la Computación y escucho mucho la palabra "gastos generales" cuando se trata de programas y clases. Que significa exactamente?
Soy un estudiante de Ciencias de la Computación y escucho mucho la palabra "gastos generales" cuando se trata de programas y clases. Que significa exactamente?
Respuestas:
Son los recursos necesarios para configurar una operación. Puede parecer no relacionado, pero necesario.
Es como cuando necesitas ir a algún lado, podrías necesitar un auto. Sin embargo, sería muy costoso hacer que un automóvil conduzca por la calle, por lo que es posible que desee caminar. Sin embargo, los gastos generales valdrían la pena si estuvieras cruzando el país.
En ciencias de la computación, a veces usamos autos para bajar por la calle porque no tenemos una mejor manera, o no vale la pena "aprender a caminar".
El significado de la palabra puede diferir mucho con el contexto. En general, son los recursos (la mayoría de las veces memoria y tiempo de CPU) los que se utilizan, que no contribuyen directamente al resultado deseado, sino que son requeridos por la tecnología o el método que se está utilizando. Ejemplos:
malloc
tiene una sobrecarga incorporada de 8 bytes debido al asignador (suponiendo una máquina clásica de 32 bits) que consiste en el tamaño del bloque más los valores de protección. Y eso es incluso antes de pensar en la granularidad de la asignación. Por lo tanto, una lista unida de enteros simples de 4 bytes tendrá una sobrecarga del 75%; las matrices son mucho mejores (a menos que necesite una inserción rápida en el medio) porque pueden tener la sobrecarga una vez (o menos, si la matriz no se asigna dinámicamente).
Estás cansado y no puedes hacer más trabajo. Tú comes comida. ¡La energía gastada en buscar comida, obtenerla y comerla realmente consume energía y está sobrecargada!
Los gastos generales son algo desperdiciado para realizar una tarea. El objetivo es hacer que los gastos generales sean muy, muy pequeños.
En informática, digamos que quieres imprimir un número, esa es tu tarea. Pero almacenar el número, configurar la pantalla para imprimirlo y llamar a las rutinas para imprimirlo, luego acceder al número desde la variable son todos gastos generales.
Wikipedia nos tiene cubiertos :
En ciencias de la computación, la sobrecarga generalmente se considera cualquier combinación de tiempo de cálculo excesivo o indirecto, memoria, ancho de banda u otros recursos que se requieren para lograr un objetivo particular. Es un caso especial de gastos generales de ingeniería.
Los gastos generales generalmente se refieren a la cantidad de recursos adicionales (memoria, procesador, tiempo, etc.) que requieren los diferentes algoritmos de programación.
Por ejemplo, la sobrecarga de insertar en un árbol binario equilibrado podría ser mucho mayor que el mismo inserto en una lista enlazada simple (el inserto tomará más tiempo, usará más potencia de procesamiento para equilibrar el árbol, lo que resulta en un mayor tiempo de operación percibido por el usuario).
Para un programador, la sobrecarga se refiere a los recursos del sistema que su código consume cuando se ejecuta en una plataforma de donación en un conjunto determinado de datos de entrada. Por lo general, el término se usa en el contexto de comparar diferentes implementaciones o posibles implementaciones.
Por ejemplo, podríamos decir que un enfoque en particular podría generar una sobrecarga considerable de la CPU, mientras que otro podría generar más sobrecarga de memoria y otro podría ponderar la sobrecarga de la red (y conllevar una dependencia externa, por ejemplo).
Pongamos un ejemplo específico: calcule el promedio (media aritmética) de un conjunto de números.
El enfoque obvio es recorrer las entradas, manteniendo un total acumulado y un conteo. Cuando se encuentra el último número (indicado por EOF "fin de archivo", o algún valor centinela, o algún botón de GUI, lo que sea) simplemente dividimos el total por el número de entradas y listo.
Este enfoque casi no genera gastos generales en términos de CPU, memoria u otros recursos. (Es una tarea trivial).
Otro enfoque posible es "sorber" la entrada en una lista. itere sobre la lista para calcular la suma, luego divídala por el número de elementos válidos de la lista.
En comparación, este enfoque podría generar cantidades arbitrarias de sobrecarga de memoria.
En una mala implementación particular, podríamos realizar la operación de suma usando recursividad pero sin eliminación de cola. Ahora, además de la sobrecarga de memoria para nuestra lista, también estamos introduciendo la sobrecarga de la pila (que es un tipo diferente de memoria y a menudo es un recurso más limitado que otras formas de memoria).
Otro enfoque (posiblemente más absurdo) sería publicar todas las entradas en alguna tabla SQL en un RDBMS. Luego, simplemente llame a la función SQL SUM en esa columna de esa tabla. Esto cambia nuestra sobrecarga de memoria local a otro servidor e incurre en sobrecarga de red y dependencias externas en nuestra ejecución. (Tenga en cuenta que el servidor remoto puede tener o no una sobrecarga de memoria en particular asociada con esta tarea, por ejemplo, puede empujar todos los valores inmediatamente al almacenamiento).
Hipotéticamente podría considerar una implementación sobre algún tipo de grupo (posiblemente para hacer factible el promedio de billones de valores). En este caso, cualquier codificación y distribución necesaria de los valores (correlacionarlos con los nodos) y la recopilación / cotejo de los resultados (reducción) contarían como gastos generales.
También podemos hablar sobre los gastos generales incurridos por factores más allá del propio código del programador. Por ejemplo, la compilación de algún código para procesadores de 32 o 64 bits puede implicar una sobrecarga mayor de la que se vería para una arquitectura antigua de 8 o 16 bits. Esto puede implicar una sobrecarga de memoria mayor (problemas de alineación) o sobrecarga de la CPU (donde la CPU se ve obligada a ajustar el orden de bits o utiliza instrucciones no alineadas, etc.) o ambas.
Tenga en cuenta que el espacio en disco que ocupa su código y sus bibliotecas, etc., generalmente no se conoce como "sobrecarga", sino que se denomina "huella". Además, la memoria base que consume su programa (independientemente de cualquier conjunto de datos que esté procesando) también se denomina "huella".
Los gastos generales son simplemente el mayor consumo de tiempo en la ejecución del programa. Ejemplo; cuando llamamos a una función y su control se pasa donde se define y luego se ejecuta su cuerpo, esto significa que hacemos que nuestra CPU se ejecute a través de un proceso largo (primero pasando el control a otro lugar en la memoria y luego ejecutando allí y luego pasar el control de vuelta a la posición anterior), por lo tanto, lleva mucho tiempo de rendimiento, por lo tanto, Overhead. Nuestros objetivos son reducir esta sobrecarga utilizando la línea durante la definición de la función y el tiempo de llamada, que copia el contenido de la función en la llamada a la función, por lo tanto, no pasamos el control a otra ubicación, sino que continuamos nuestro programa en línea, por lo tanto, en línea .
Podrías usar un diccionario. La definición es la misma. Pero para ahorrarle tiempo, Overhead es el trabajo requerido para hacer el trabajo productivo. Por ejemplo, un algoritmo se ejecuta y hace un trabajo útil, pero requiere memoria para hacer su trabajo. Esta asignación de memoria lleva tiempo y no está directamente relacionada con el trabajo que se realiza, por lo tanto, es una sobrecarga.
Puedes consultar Wikipedia . Pero principalmente cuando se utilizan más acciones o recursos. Al igual que si está familiarizado con .NET, puede tener tipos de valores y tipos de referencia. Los tipos de referencia tienen sobrecarga de memoria, ya que requieren más memoria que los tipos de valor.
Un ejemplo concreto de sobrecarga es la diferencia entre una llamada a procedimiento "local" y una llamada a procedimiento "remoto".
Por ejemplo, con RPC clásico (y muchos otros marcos remotos, como EJB), una llamada de función o método tiene el mismo aspecto para un codificador, ya sea una llamada de red local, en memoria o distribuida.
Por ejemplo:
service.function(param1, param2);
¿Es ese un método normal o un método remoto? Por lo que ves aquí no puedes decirlo.
Pero puede imaginar que la diferencia en los tiempos de ejecución entre las dos llamadas es dramática.
Entonces, mientras que la implementación central "costará lo mismo", la "sobrecarga" involucrada es bastante diferente.
Piense en los gastos generales como el tiempo requerido para administrar los hilos y coordinarlos. Es una carga si el hilo no tiene suficiente tarea que hacer. En tal caso, el costo indirecto sobre el tiempo ahorrado mediante el uso de subprocesos y el código lleva más tiempo que el secuencial.
es cualquier cosa que no sean los datos en sí, es decir, tcp flags, encabezados, crc, fcs, etc.