SCOOP ( Simple Concurrent Object Oriented Programming ) es un modelo de concurrencia diseñado para el lenguaje de programación Eiffel , concebido por su creador y diseñador, Bertrand Meyer .
SCOOP define una forma de escribir un programa orientado a objetos sin utilizar hilos, bloqueos ni otros métodos típicos de multiprogramación . Esto permite que el compilador o el entorno de ejecución optimicen la concurrencia y eliminen fallos de diseño comunes, como el interbloqueo.
El modelo fue diseñado por primera vez a principios de la década de 1990 y publicado en 1993 en Communications of the ACM [ 1 ] Una versión actualizada fue descrita en el capítulo 30 del libro Object-Oriented Software Construction . [ 2 ] Eiffel Software desarrolló una implementación prototipo en 1995. Un artículo de Compton y Walker [ 3 ] proporciona una descripción general de SCOOP y describe otra implementación temprana. Nienaltowski, Arslan y Meyer publicaron una descripción del modelo en 2003. [ 4 ] El trabajo en SCOOP continuó en la Cátedra de Ingeniería de Software en ETH Zurich . [ 5 ] SCOOP estuvo disponible como parte estándar de EiffelStudio a principios de 2011. [ 6 ]
Descripción general técnica
SCOOP funciona permitiendo que las referencias a ciertos objetos se declaren como separadas . En el código siguiente, una entidad local_inventoryse declara como un tipo separado, especificando la palabra clave del lenguaje Eiffel separateen la declaración.
inventario_local : INVENTARIO separadoUn procesador SCOOP puede gestionar un objeto independiente , distinto del procesador que gestiona el objeto de referencia. Un procesador SCOOP es el concepto abstracto de un hilo de control autónomo que gestiona la ejecución de operaciones en uno o más objetos. Los procesadores SCOOP son independientes de los mecanismos de concurrencia subyacentes, como los hilos de procesamiento , los múltiples núcleos de procesador y los sistemas informáticos distribuidos .
Además del concepto de separación, SCOOP aprovecha los principios del diseño por contrato como parte de su estrategia para sincronizar el acceso a recursos separados compartidos. Por ejemplo, una condición previa para que un consumidor acceda a un artículo del ejemplo de inventario anterior podría ser que dicho artículo exista. Esto se expresaría mediante un contrato en la característica de la clase INVENTORYque devuelve el artículo.
artículo : PRODUCTO -- El artículo actual requiere inventario_tiene_artículo : tiene_artículoEn el procesamiento secuencial tradicional, un cliente que pretenda realizar una llamada local_inventory.itemsería responsable de asegurarse de que local_inventory.has_itemse cumple la condición previa antes de realizarla. Si la llamada itemse realizara en un estado en el que has_itemno se cumple la condición previa, el emisor incurriría en una excepción por violación de la condición previa.
En presencia de SCOOP y dada la separación de local_inventory, realizar la comprobación has_itemantes de llamar itemno sería fiable. Esto se debe a que el estado de local_inventorypodría haber cambiado debido a solicitudes de otros procesadores SCOOP entre el momento en que se realizó la comprobación y el momento en que itemse pudo llamar.
Como resultado, cuando SCOOP está habilitado, la precondición has_itemse transforma de una condición de corrección , que provocará una excepción en caso de violación, a una condición de espera . La condición de espera retrasará la ejecución itemhasta que has_itemse cumpla la condición. En la implementación de Eiffel Software, si SCOOP no está habilitado, la separatepalabra clave se ignora y se asume un procesamiento secuencial.
Véase también
Referencias
- ↑ Bertrand Meyer: Programación sistemática concurrente orientada a objetos , en Communications of the ACM, 36, 9, septiembre de 1993, pp. 56-80, también disponible en línea .
- ↑ Bertrand Meyer: Construcción de software orientado a objetos , 2.ª edición, Prentice Hall, 1997
- ↑ Compton, Michael; Walker, Richard (2002). "Un sistema de tiempo de ejecución para SCOOP" . Journal of Object Technology . 1 (3): 119– 157. doi : 10.5381/jot.2002.1.3.a8 .
- ↑ Nienaltowski, P.; Arslan, V.; Meyer, B. (2003). "Programación concurrente orientada a objetos en .NET" (PDF) . IEE Proceedings - Software . 150 (5): 308. doi : 10.1049/ip-sen:20030992 (inactivo el 12 de julio de 2025).
{{cite journal}}: CS1 maint: DOI inactivo desde julio de 2025 ( enlace ) - ↑ ETH Zúrich, Cátedra de Ingeniería de Software: página del proyecto SCOOP
- ↑ Eiffel Software: SCOOP: Concurrencia para Eiffel
Enlaces externos
- Documentación en línea de Eiffel Software para SCOOP .
- La página de investigación SCOOP en ETH Zurich .
- Software de 1993
- Lenguajes de programación concurrentes
- Lenguajes de programación orientados a objetos