用Java创建的线程在Windows和Linux上的行为是否不同?
2022-09-03 01:59:03
据我所知,Java使用的是操作系统线程(与Erlang相反),这意味着在Windows和Linux上使用Java创建的线程可能行为不同。
Windows 和 Linux 上的 Java 线程有什么区别吗?最大的区别是什么?这可能只是性能上的差异?
据我所知,Java使用的是操作系统线程(与Erlang相反),这意味着在Windows和Linux上使用Java创建的线程可能行为不同。
Windows 和 Linux 上的 Java 线程有什么区别吗?最大的区别是什么?这可能只是性能上的差异?
这是一个非常笼统的问题,所以我会给出一个一般性的答案。
Java在其开发早期从绿色线程切换到本机线程。这并不意味着在Windows和Linux上创建的线程将具有不同的行为,因为这两个平台都将在其各自的JVM实现中使用本机线程。
每个操作系统向 Java 公开的线程接口,以及通过 pthreads 和 Windows 线程进行线程处理的本机接口,也非常相似。
关于两个平台上的线程的最大区别在于,Linux上的所有线程都是一种进程形式。Windows 对线程和进程的处理方式非常不同。
根据我个人的经验,Windows 上的本机线程稍微轻量级一些,并且在单进程应用程序中的性能可能稍好一些。相应地(也许无关紧要),与Linux进程相比,Windows进程非常重量级。
JVM向您隐藏所有操作系统差异...
正如之前回答的那样,Windows上的线程是Linux上的重量级线程。
根据经验,繁重的多线程应用程序可能会遇到一些延迟,自动内存垃圾回收器可能会产生巨大的内存峰值。