In particular, what are the implications of running code in two different application domains?
How is data normally passed across the application domain boundary? I
If you look at it from processor internal details perspective it sets different value for Code Segment (the CS) register. code and CS:IP (Instruction Pointer) register is the one that is in execution by the processor.
(I've chosen to skim page table related discussion for brevity).
AppDomain marks this boundary. for code safety.
The reason for giving this background is to get away with question of these sort: 1. how can we access resource across two app domain (yes using pipes or some other sharing mechanis not directly as CS:IP cant be set to some other appdomain. It is just the OS that can do it. Not the CLR)
Could there be multiple threads in app domain. Technically yes as the CS value going to be in the current process. you can change IP to something else by a jump statement (function call/goto combination)
can two threads in two different app domain communicate (No. refer point 1.)
can two threads in single app domain communicate (Yes. refer point 2)
several other combination of these cases could be answered by little knowledge of how CS:IP works.