I was confused about this as well.
From my reading of the docs, I think (2) would be closer to the truth.
https://docs.ray.io/en/latest/ray-core/actors/async_api.html
Specifically, the following lines:
"Under the hood, Ray runs all of the methods inside a single python event loop. Please note that running blocking ray.get
or ray.wait
inside async actor method is not allowed, because ray.get
will block the execution of the event loop.
In async actors, only one task can be running at any point in time (though tasks can be multi-plexed). There will be only one thread in AsyncActor! See Threaded Actors if you want a threadpool."
The docs state that even if you set max_concurrency > 1, only one thread would be created for async actor (the parameter would affect the number of concurrent coroutines, rather than threads for async actors)