Herramientas de usuario

Herramientas del sitio


pc:ideas_diplomatura

¡Esta es una revisión vieja del documento!


(el usuario blanco puede editar, Nico)

Ejemplos Formativos vs. Informativos

Dividir ejemplos en:

  • Formativos: se mostrarán y pensarán en detalle
  • Informativos: paseo rápido.

Formativos

  • BoundedBuffer (aka Productores/Consumidores, aka BoundedCounter)
  • Concurrent Vector Writing [Fei99] vs. Hand-over-hand locking [2.5.1.4, Lea99]

Informativos

  • Nested monitor

Taller

Investigar

  • Inyectar ruido en el scheduler, a través de Thread.yield() o toqueteando la JVM.
    • Ver [Goe06, 12.1.6 – Generating More Interleavings]
  • Mostrar optimizaciones con algún ejemplo simple (*[ x:=x+1; x:=x-1 ])
    • javap -c desensabla bytecode. Listado de los VM Opcodes.
    • -server en la jre optimiza más.
  • Ver como meter algo de assert para los invariantes.
    • En JUnit hay métodos assertTrue, assertEqual, etc.
    • La palabra assert está desde JDK 1.4.2.
    • Algunos compiladores necesitan -source 1.4 o -source 5.0 para aceptarla.
    • En la JVM se activa con java -ea, ver también -esa.
  • ?Se puede hacer un ejemplo donde se muestre la sincronización de memoria ya sea con volatile o con synchronized?
  • Ver el sourcecode de la JVM en el scheduler y como maneja el wait.
  • Que hay en java.util.concurrent: CondVar sobre todo en Java 6 y Java 5, en Java 1.4.2 no está
  • Notar que hay opciones muy específicas como:
  1. XX:PreBlockSpin=10

Spin count variable for use with -XX:+UseSpinning. Controls the maximum spin iterations allowed before entering operating system thread synchronization code. (Introduced in 1.4.2.)

IncDecStar

Implementar *[ x:=x+1; x:=x-1 ] Deducir el grado de atomicidad de x:=x+1 a partir de si se cumple el invariante 0⇐x⇐2. Es notoria la diferencia entre 1 CPU y 2 CPUs en la riqueza del scheduling. Relacionar esto con el hecho de que el planificador de Java es cooperativo en realidad, o sea no tiene Quanto. Está bueno mostar:

  • Como una mala sincronización para hacer incremento atómico falla, por ejemplo synchronized(this) { } sincroniza con el mismo objeto thread.
  • Desensablar con javap -c y ver que el incremento está desacoplado.
pc/ideas_diplomatura.1173467731.txt.gz · Última modificación: 2018/08/10 03:03 (editor externo)