mutitarea

delay sirve para detener la ejecución : delay(500) para 0.5 segundos.

millis() se usa de otra forma, devuelve el número de milisegundos que hace que se encendió arduino, puedes compararlo con un tiempo anterior y decidir cual de las acciones vas a hacer ahora (detectar , encender / apagar el motor, no hacer nada ...)
compara el funcionamiento de blink y blinkwithoutdelay como dijo Sergegsx.