Constructor for ListTranslationProviderLanguageDirection (SDK 3.0 example) called many times

The constructor for ListTranslationProviderLanguageDirection (SDK 3.0 example) is called 5 times every time a file is opened in a project that uses this translation provider.

One way to see it is to add these two static variables to the ListTranslationProviderLanguageDirection class:

static private int _instance = 0;
static private List<string> _debugLog = new List<string>();

and then these two lines in the constructor:

_debugLog.Add("Instance " + _instance++);
File.WriteAllLines("c:\\debug.txt", _debugLog.ToArray());

It will produce this output:

Instance 0
Instance 1
Instance 2
Instance 3
Instance 4

Moreover, if update capabilities are added to the translation provider, the constructor is called even more times (7 or 8).

The arguments passed to each constructor seem to be always the same and called by the same thread.

Why is the language direction instantiated so many times each time a file is opened in the Studio editor? Is it documented which Studio features create a language direction instance and for what purpose?

Also, can it be assumed that for a given language direction instance, all callback member functions will be called by Studio from the same thread?

Finally (just in case class static variables are needed in the language direction class), are all language direction instances always created by Studio from the same thread?