Is curl_easy_perform() synchronous or asynchronous?
Does curl_easy_perform() block until the entire request is send AND the reply is processed by the callback function
Yes, that is exactly what it does.
(If you rather want a non-blocking behavior, libcurl's multi interface is the way to go.)