我已经在StackOverflow和一些博客上阅读了有关java.net vs
java.nio的几篇文章。但是我仍然无法理解何时应该使用NIO而不是螺纹插座。您能否检查以下我的结论,并告诉我哪些是不正确的,哪些是未得到的?
由于在线程模型中,您需要为每个活动的连接专用一个线程,并且每个线程的堆栈占用大约250 KB的内存,因此对于每个套接字模型,每个线程都会在大量并发连接上很快耗尽内存。不像蔚来
在现代操作系统和处理器中,可以认为大量活动线程和上下文切换时间对于性能几乎无关紧要。
NIO通过输出可能会更低,因为异步NIO库在高负载环境中使用的select()和poll()比唤醒线程并使其进入睡眠状态要昂贵得多。
NIO一直较慢,但是它允许您处理更多的并发连接。从本质上讲,这是时间/空间上的折衷:传统IO速度更快,但内存占用量更大,NIO速度较慢,但占用的资源更少。
Java对每个并发线程的硬限制为15000/30000,具体取决于JVM,这会将每个连接模型的线程限制为最大并发连接数,但是JVM7没有这样的限制(无法确认此数据)。
因此,作为结论,您可以这样做:
我对么?
这对我来说似乎是正确的,除了有关Java限制线程数的部分(通常受其运行的操作系统限制)(请参阅JavaVM可以支持多少个线程?并且不能超过2542个Java中的线程)。 4GB iMac OSX 10.6.3 SnowLeopard(32位))。
为了达到那么多线程,您可能需要调整JVM的堆栈大小。
问题内容: 使用Java本机接口时,我遇到了一个导致此错误的问题。我相信这是因为我使用MinGW编译了.dll,而我的系统是64位的,因此我的Java运行于64位,而MinGW编译为32位的.dll。无论如何,有没有强制我的Java在32位上运行? 问题答案: 您将必须安装32位JVM,然后才能运行代码。 如果要分发应用程序,则将要构建DLL的32位和64位版本。然后,使用以下技术来加载正确的DL
问题内容: 有谁知道我会怎么做才能检测到Windows在Python下的版本。我需要知道这是为Program Files使用正确的文件夹的一种方式。 非常感谢 问题答案: 模块 -访问基础平台的标识数据 在64位Windows上,32位Python返回: 这意味着 即使已接受此答案,也不正确。 请参阅以下一些答案,以了解可能适用于不同情况的选项。
问题内容: 在C语言中,在64位系统上long为64位。这反映在Python的ctypes模块中吗? 问题答案: 的大小 取决于内存模型。在Windows(LLP64)上是32位,在UNIX(LP64)上是64位。 如果需要64位整数,请使用。 如果需要指针大小的整数,请使用(“该值表示为整数”)。
导入tensorflow时,会出现以下错误: 回溯(最后一次调用):文件“C:\Users\User\Anaconda3\lib\site packages\tensorflow\python\pywrap\u tensorflow.py”,第58行,来自tensorflow.python.pywrap\u tensorflow\u internal import*文件“C:\Users\User
问题内容: Oracle的可用下载列表上似乎没有32位下载程序包。 更新 可以在这里下载: 问题答案: 尽管Oracle的糟糕,未加密的 下载页面 似乎缺少JDK9的32位二进制文件,但是,如果(单击“接受许可协议”后)复制64位二进制文件的URL并更改 为 ,它将为您提供32 位二进制文件位二进制文件。 更新:现在不见了。怪异的!Oracle在玩什么?他们致力于修复Java 9的