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?
cuánto "cosas extra" necesitas hacer para obtener algo. por ejemplo, si tengo que cargar un proyecto de 37 clases solo para imprimir "Hello World", consideraría que es un gasto excesivo.
scunliffe
1
@ doug65536 En realidad es al revés. =)
Yukio Fukuzawa
Respuestas:
177
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".
Una analogía similar sería volar. Los aviones son mucho más rápidos que los automóviles, pero la sobrecarga del check-in en el aeropuerto, la seguridad, etc. hace que los automóviles sean una mejor opción para distancias más cortas.
FogleBird
s / drive / go / (Si necesita conducir en algún lugar, generalmente no decide caminar ...
RCIX
1
@ inf3rno La ironía? ¿Cómo llegamos a nuestro auto? Caminamos. Y podemos caminar totalmente ... a nuestro auto. No podemos caminar hasta nuestro destino, incluso si está más cerca que nuestro automóvil.
corsiKa
Si tuviera que decir que escribo un código Java de baja sobrecarga, ¿cómo interpretaría eso en términos de la definición de "recursos necesarios para configurar una operación"? Mi código no requiere mucha configuración?
committedandroider
Bueno, tienes que encender la computadora o el servidor, tienes que cargar el sistema operativo y todos los controladores, tienes que iniciar el proceso de Java, tienes que encender la JVM, tienes que cargar todas tus clases, tienes tiene que sincronizar el búfer IO con la consola para que pueda hacer su "hola mundo" Pero, por favor, cuéntame más sobre la codificación de bajo costo.
corsiKa
40
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:
Sobrecarga de protocolo : las tramas Ethernet, los paquetes IP y los segmentos TCP tienen encabezados, las conexiones TCP requieren paquetes de protocolo de enlace. Por lo tanto, no puede utilizar todo el ancho de banda que el hardware es capaz de utilizar para sus datos reales. Puede reducir la sobrecarga al usar paquetes de mayor tamaño y UDP tiene un encabezado más pequeño y no hay apretón de manos.
Sobrecarga de memoria de estructura de datos : una lista vinculada requiere al menos un puntero para cada elemento que contiene. Si los elementos son del mismo tamaño que un puntero, esto significa una sobrecarga de memoria del 50%, mientras que una matriz puede tener una sobrecarga del 0%.
Sobrecarga de llamadas a métodos : un programa bien diseñado se divide en muchos métodos cortos. Pero cada llamada al método requiere configurar un marco de pila, copiar parámetros y una dirección de retorno. Esto representa la sobrecarga de la CPU en comparación con un programa que hace todo en una sola función monolítica. Por supuesto, la capacidad de mantenimiento adicional hace que valga mucho la pena, pero en algunos casos, las llamadas de método excesivas pueden tener un impacto significativo en el rendimiento.
Parece que la palabra tiene el mismo significado en todos esos ejemplos (necesarios para ejecutar la tarea, pero no siempre relacionados con hacerlo directamente)
RCIX
Re estructura de datos sobrecarga de memoria: con la mayoría de los asignadores de memoria, es aún peor que eso. Cada valor devuelto por malloctiene 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).
Donal Fellows
19
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.
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.
Pero si no fuera así, arreglarías WikiPedia y luego harías la misma publicación aquí.
SamGoody
11
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.
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".
fuente
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:
fuente
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.
fuente
Wikipedia nos tiene cubiertos :
fuente
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).
fuente
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".
fuente
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 .
fuente
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.
fuente
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.
fuente
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:
¿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.
fuente
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.
fuente
es cualquier cosa que no sean los datos en sí, es decir, tcp flags, encabezados, crc, fcs, etc.
fuente