Both Threading Model
You can use the Both threading model for all types of ASP components.
All Both-threaded components should use the COM Library function CoCreateFreeThreadedMarshaler to create a free-threaded marshaler object. If you aggregate the free-threaded marshaler object, you can make calls between threads without any marshaling or thread switches. For more information about free-threaded marshaler objects, see the COM and ActiveX Object Services section of.
If you build a Both-threaded component that does not aggregate the free-threaded marshaler object, you will only be able to dynamically assign the component application scope if the AspTrackThreadingModel configuration property is set to 1 (True). By default, this property is set to 0 (False). For example, if the component MyComponents.Comp1 supports the Both threading model, but does not create a free-threaded marshaler object, the following code will generate a run-time error unless AspTrackThreadingModel is set to 1 (True).
Set Application("Obj1") = Server.CreateObject("MyComponents.Comp1")
Dynamically assigning MyComponents.Comp1 to session scope will severely impede performance for the duration of the session. Likewise, assigning this component to either application or session scope with the <OBJECT> tag would also have a negative impact on performance.
The only disadvantage of building components using the Both model is that serialization of calls to the component are not allowed. This means that your component will need to guarantee thread safety. Building in thread safety may slow down your development time, but will make your component more suitable for use with session or application scope.