我想设置一个用Java读取的阻塞文件.也就是说,有一个文件,当包装FileInputStream和任何read()方法被调用时,调用块.
我想不出一个简单的与操作系统无关的方法 - 在类Unix操作系统上,我可以尝试使用mkfifo该文件创建FIFO 并从中读取.一个可能的解决方法是创建一个非常大的文件并从中读取 - 在捕获堆栈之前读取不太可能完成,但是它很丑陋而且很慢(实际上读取在缓存时仍然非常快).
相应的套接字read()案例很容易设置 - 自己创建一个套接字并从中读取,你可以有确定性的阻塞.
目的是检查方法的堆栈以确定在这种情况下顶框架是什么.想象一下,我有一个组件定期对所有正在运行的线程的堆栈跟踪进行采样,然后尝试对该线程当前正在执行的操作进行分类.它可以做的一件事是文件IO.所以我需要知道文件IO期间"堆栈顶部"是什么样的.我已经通过实验确定了(只是以各种方式读取文件并对堆栈进行采样),但我想编写一个如果这种情况发生变化就会失败的测试.
编写这样一个测试的自然方法是启动一个执行文件读取的线程,然后检查顶部框架.为了可靠地执行此操作,我想要一个阻塞读取(否则线程可能会在执行堆栈跟踪之前完成其读取等).
我有一个基于 Java 的游戏服务器。1个用户需要使用2个线程来发送和接收数据。但是每当线程达到200-300个线程时,执行数据的功能就不再起作用了。服务器的CPU、RAM还没有满,大约只有15-20%。我尝试在用户断开连接时使用“垃圾收集器”,但这种情况仍然发生。谢谢你的帮助。抱歉我的英语不好。