1. Single-core CPU running multithreaded programs, the same time only one thread running, the system to help you switch threads (CPU time slicing), the system to each thread allocated time slices to execute, each time slice about 10ms, looks like the same run, But actually each thread runs a little bit to the other threads continue to run, efficiency will not improve, switching threads will instead increase the overhead (thread context switch), macro can look at the parallel, the single core is only concurrency, a real CPU core executes only at the same time a thread (not a process).
2. The use of multithreading is to do a time-consuming operation, it is necessary to wait for the return results, when using multithreading can increase the degree of program concurrency. Multithreading is wasteful if a task that does not require any waiting and sequential execution can be done.
Go Goroutine and Java multithreading comparison