(I hate the fact that I can't yet comment since my reputation isn't high enough, so that's the reason for this "answer")
@user57368 is correct in the first paragraph, however, there are (Based on the original question) a few "issues" with the last two paragraphs:
GCD (Apple's "great" threading tool called Grand Central Dispatcher) is the runtime threading that makes use of libdispatch that provides the "dispatch_*" funtions. GCD does make great use (and makes the code "nicer") by using the blocks construct. HOWEVER GCD does not need blocks, as there are function versions of the dispatch_* function calls.
Blocks is a language lamdba based construct, and does not depend on, nor provide GCD/libdispatch functionality. They were both introduced by Apple at the same time in the MacOSX/iOS/Xcode world, but they aren't dependent on each other.
PS: there is a libdispatch implementation for FreeBSD I saw recently, and some attempts of implementing an option on Linux too.