java - Java应用程序中CPU核心数和线程数之间的关系是什么?

标签 java multithreading sockets networking

我是 java 多线程 编程的新手。我想到的问题是,根据我的 CPU 核心数,我可以运行多少个线程。如果我运行的线程多于 CPU 核心数,机器运行应用程序是否会产生开销。例如,当我们有一台服务器机器有一个运行 2 个线程(主线程 + 开发人员线程)的服务器软件时,当更多同时客户端与服务器建立套接字连接时,服务器是否会产生开销?

谢谢。

最佳答案

系统可以同时执行的线程数量(当然)与系统中的内核数量相同。

系统上可以存在的线程数受可用内存的限制(每个线程都需要一个堆栈和操作系统用来管理线程的结构),并且操作系统允许的线程数可能存在限制(这取决于操作系统架构,某些操作系统可能使用固定大小的表,一旦表满就无法创建更多线程)。

通常,当今的计算机可以处理成百上千个线程。

系统中使用的线程多于内核的原因是:大多数线程将不可避免地花费大量时间等待某些事件(例如:字处理器等待用户在键盘上键入).操作系统管理以这种方式等待的线程不会消耗 CPU 时间。

关于java - Java应用程序中CPU核心数和线程数之间的关系是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21158165/

相关文章:

java - java.net.Socket.setSoTimeout 可靠吗?

java - 为什么 Object obj = new Integer(2);字节 b = (byte) obj;在运行时导致 ClassCastException?

java - 从队列中消费时,所有 boolean 字段均为 false

创建用户级线程

multithreading - 模拟器上的单核多线程

java - 通过套接字发送时 Jar 文件被损坏

java - 如何递归地在preOrder遍历中找到下一个节点

java - 如何在ubuntu服务器上设置gwt上传路径

visual-studio - 在 Visual Studio 调试器中中断线程创建

python - 如何使用 python 套接字库通过 adhoc wifi 进行广播