Pregunta

¿Cómo se elige si alguien justifica sus compensaciones de diseño en términos de código optimizado, claridad de implementación, eficiencia y portabilidad?

Un ejemplo relevante para el propósito de esta pregunta podría ser el manejo de archivos grandes, donde un "archivo grande" es `` bastantes GB '' para un problema que se simplificaría utilizando métodos de acceso aleatorio.

Los enfoques para leer y modificar este archivo podrían ser:

  1. Utilice las transmisiones de todos modos y busque el lugar deseado, que es portátil, pero potencialmente lento y no está claro, esto funcionará para prácticamente todos los sistemas operativos.
  2. asigna la porción relevante del archivo como un bloque grande. Por ejemplo, mmap un fragmento de 50 MB del archivo para procesar, para cada fragmento: esto funcionaría para muchos sistemas operativos, dependiendo de las sutilezas de implementar mmap para ese sistema.
  3. Simplemente mmap todo el archivo: esto requiere un sistema operativo de 64 bits y es la forma más eficiente y clara de implementar esto, sin embargo, no funciona en sistemas operativos de 32 bits.
¿Fue útil?

Solución

No estoy seguro de lo que está preguntando, pero parte del proceso de diseño es analizar los requisitos de portabilidad y rendimiento (entre otros factores).

Si sabe que nunca necesitará portar el código y necesita absolutamente el mejor rendimiento, entonces debe ajustar su implementación en consecuencia. No tiene sentido ser portátil solo por su propio bien.

Tenga en cuenta también que si desea tanto rendimiento como portabilidad, no hay nada que le impida proporcionar una implementación para cada plataforma. Por supuesto, esto aumentará su costo, así que realmente depende de usted priorizar sus necesidades.

Otros consejos

Sin restricciones, esta pregunta racionalmente no puede responderse racionalmente.

Estás preguntando cuál es el mejor color sin decirnos si estás pintando una casa, un auto o un cuadro.

Las restricciones incluirían al menos

  • Idioma de elección
  • Plataformas de destino (¿servidor de grado industrial de CPU múltiple o iPhone?)
  • Optimización para velocidad vs. memoria
  • Costo (¿quién financia esto y existe una restricción de entrega?)

Ninguna pieza de software podría tener "ultimate" portabilidad.

Un ejemplo de este tipo de problema que se maneja usando una variedad de métodos pero con una fuerte restricción tanto en la entrada / salida específica requerida como en la medición de "mejor" sería el WideFinder .

Básicamente, debes pensar primero antes de codificar. Cada proyecto es único y un análisis de las necesidades podría ayudar a decidir qué es primordial para él. Lo que hará la mejor solución para cualquier proyecto depende de algunas cosas ...

En primer lugar, ¿este proyecto necesitará ser o eventualmente ser multiplataforma? Dependiendo de su elección, elegir el lenguaje de programación correcto debería ser más fácil. Por otra parte, también podría usar más de un idioma en su proyecto y esto es completamente normal. La portabilidad no significa necesariamente menos rendimiento. Todo lo que implica es que implica un trabajo más duro para lograr sus objetivos porque necesitará un código de calidad. Además, cada lenguaje de programación tiene su propia filosofía. Aprende lo que son. Una cosa es segura, ciertos problemas frecuentemente vuelven una y otra vez. Es por eso que conocer los diferentes patrones de diseño a veces puede marcar la diferencia, pero algunos idiomas tienen sus propios modismos y pueden ser muy relevantes al elegir un idioma. Otra cosa que necesita pensar es en los diferentes enfoques que puede tener para su proyecto. Multithreading, sockets, sistemas cliente / servidor y muchas otras tecnologías están a su disposición. Elegir la tecnología adecuada puede ayudar a mejorar un proyecto.

Conocer las necesidades y las diferentes soluciones disponibles hoy en día es lo que ayudará a decidir cuándo es el momento de elegir las diferentes compensaciones.

Realmente depende de los controladores para el proyecto. Si está haciendo un desarrollo empresarial interno, haga lo más simple que pueda funcionar en su objetivo de hardare. Mod para requisitos de rendimiento según sea necesario.

Si sabe que necesita admitir diferentes plataformas de hardware en el día 1, entonces claramente deberá elegir una implementación portátil o utilizar múltiples enfoques.

La portabilidad por el bien de la portabilidad ha sido una herramienta de marketing para Java desde el inicio y es una realidad para C por convención, y creo que la mayoría de las personas que la cumplen "crecieron". con Java o C dirá eso.

Sin embargo, la portabilidad absoluta solo será cierta para las aplicaciones más triviales a la mayoría de las aplicaciones con complejidad media; cualquier cosa con alta complejidad necesitará ajustes especializados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top