Ada's tasks aren't defined to be greenlets; an implementation can make then OS threads or processes, limiting their number. And rendezvousing is more cumbersome than channels, e.g. passing a channel over a channel.
Google's implementation makes use of greenlets, while gccgo is using OS threads. Further implementations might decide on others approaches.
As for channels/rendezvous you might be correct, as I only played a bit with Ada.