这篇博客非常不错:Goroutine并发调度模型深度解析
关于这篇博客的一些总结:
线程
用户级线程模型
这种模型在内核看来,用户只有进程。也就是说,用户进程请求内核操作时,内核使用一个内核线程为其服务。用户进程内的线程划分,是由进程内用户自调度的,内核线程无感知。坏处是,用户线程发起某个阻塞性的内核操作时,内核方面是为用户进程服务的,那么用户内自划分的其他的线程实际上也是阻塞的,因为在内核看来,用户进程已经发起调用,占用一个内核线程了。
内核级进程模型
java.lang.Thread使用的就是这种模型。这种模型是,一个内核线程对应一个用户进程内的一个线程。如果创建很多用户线程,那么就对应的会创建很多内核线程,此时调度开销会急剧上升。不过现在java好像是开始支持n-m模型了。在网络性能上,讲道理应该与GO不相上下,劣势可能就在于java这种半解释半编译型语言内存方面的消耗了,毕竟有得就有失嘛。
未完待续…