I've read through the parallel computing documentation and experimented with some toy examples, but I still have some questions about the fundamentals of parallel programming in Julia:
1. It seems that @async performs work in a separate green thread, while @spawn performs work in a separate julia process. Is that right? 2. Will code executed with several calls to @async actually run on separate cores? 3. Getting true parallelism with @spawn or @parallel requires launching julia with the -p flag or using addprocs(...). Does the same hold for @async, i.e., will I get true parallelism with several calls to @async if I only have a single julia process? 4. In what situations should I choose @spawn over @async, and vice versa? 5. How does scope and serialization work with regards to @async? If the code being executed with @async references some Array, will each thread get a copy of that Array, like if I had called @spawn instead? Or will each thread have access to the same Array, obviating the need for SharedArray when using @async? A lot of this stuff is left ambiguous in the documentation, but I'd be happy to submit a pull request with updates if I can get some clear answers. Thanks! -John