对于多核的Linux服务器,同一环境下,Java多线程和Python多线程同时进行IO密集型操作,哪个程序会更快一些呢?
无论是Java还是Python他们都是真实的线程,那么也就是调用了操作系统的api来创建线程,至于是创建的是内核级还是用户级线程,不得而知。
下面这张图来看下用户级和内核级线程配置策略:
如果是用户级线程,那么线程对于cpu不可见,由jvm或者python解释器来控制线程获取cpu资源的权限。所以说对于同一个进程下创建的多个线程,同一时刻只有一个线程获取了cpu资源,也就是线程只能并发不能并行(关于并发和并行的解释可以参考文章:并发与并行)。
那么我们平时所说的Java多线程并行处理又是怎么回事?如果多线程只能并发,不能并行,那么无论是单核还是多核,java和python在io密集型的环境下应用性能是差不多的。
如果是内核级线程,同一进程下多个线程同一时刻可以获得多个cpu资源,这样就实现了并发,这个就可以说通了,而python解释器GIL(关于python GIL的解释,可以参考文章:Python解释器GIL详解)中的线程锁将python线程控制,使得同一时刻只有一个线程获得cpu资源的权限,所以,在cpu密集型的环境或者是多核系统下,java多线程明显比python多线程性能强。
IO密集型和Cpu密集型的介绍可以参考文章:
什么是IO密集型与CPU密集型?
Good health is over wealth.
书山有路勤为径,学海无涯苦作舟。
欢迎关注微信公众号:【程序员写书】
喜欢宠物的朋友可以关注:【电巴克宠物Pets】
一起学习,一起进步。
