Which is more efficient, Update() or a couroutine with while(true)?

So, I’m just a noob developer and I’ve been working on a project which was already in development before I joined. And instead of using Update(), coroutines are used in many places.

So I was just wondering which is more efficient. An Update() or a coroutine which looks tlike this:

IEnumerator MyUpdate()
{
     while(true)
     {
            yield return new WaitForSeconds(Time.deltaTime);
            //Update things here.
     }
}

Coroutines are best when you have a specific condition to wait for.
As in; waiting for a threaded job to finish or in this case waiting for a certain amount of time.
Coroutines also generate garbage, especially when you’re yielding with yield return new WaitForendofFrame() As every time you yield that object is created.

Unity, internally, holds a list off all things needing to update essentially and traverses that when everything needs to update. Definitely more advantagous as there’s features to explicitally state execution order.

I recommend this entirely over coroutines.