Call-stack architectures versus event-driven architectures