AssetManager VS StreamableManager

So far as I know, there are 2 (or 3) ways to load primary data assets in UE:

AssetManager.LoadPrimaryAsse();

AssetManager.GetStreamableManager().RequestSyncLoad();

Handle = StreamableManager.RequestSyncLoad(CharacterDataAsset.ToSoftObjectPath());

I read this in the document: FStreamableManager a native class for managing streaming assets in and keeping them in memory. AssetManager is the global singleton version of this with blueprint access.

Here is my question: Which one should I use? If I only will load and unload primary data asset in C++, then I should go with FStreamableManager, If I’ll work with C++ and BPs (you cannot access pure BP data asset in C++, right?), I should use AssetManager. But what’s AssetManager.GetStreamableManager().RequestSyncLoad() ?

Really confused, I googled a lot, but haven’t found any comparison yet. please help, thanks!