Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中如何将文件读/写到硬盘的队列?_Java_Multithreading_File Io_Java Server - Fatal编程技术网

在java中如何将文件读/写到硬盘的队列?

在java中如何将文件读/写到硬盘的队列?,java,multithreading,file-io,java-server,Java,Multithreading,File Io,Java Server,我有一个服务器,它接收来自数千个连接tcp套接字的客户端的请求,从一个硬盘读取或写入数据 我知道我需要一个线程来处理所有的HD file.IO,但我如何才能将所有这些请求从套接字连接线程传递到一个主硬盘驱动器管理器,该主硬盘驱动器管理器将以某种顺序完成这项工作,并将数据转换到连接的套接字线程 有没有办法以这种方式对任务进行排队 当然,看一看并封锁队列我不同意这里所说的话,使用一个管理器(使用数据并将其写入hdd)的另一层是更好、更具可扩展性的方法,您将释放连接线程以执行其自然工作,并且您有一个管

我有一个服务器,它接收来自数千个连接tcp套接字的客户端的请求,从一个硬盘读取或写入数据

我知道我需要一个线程来处理所有的HD file.IO,但我如何才能将所有这些请求从套接字连接线程传递到一个主硬盘驱动器管理器,该主硬盘驱动器管理器将以某种顺序完成这项工作,并将数据转换到连接的套接字线程


有没有办法以这种方式对任务进行排队

当然,看一看并
封锁队列

我不同意这里所说的话,使用一个管理器(使用数据并将其写入hdd)的另一层是更好、更具可扩展性的方法,您将释放连接线程以执行其自然工作,并且您有一个管理器,您可以向其发出任何所需命令,例如停止写入磁盘或写入其他分布式源,如果您只想完成任务,您可以选择每种方法,每次写入磁盘时,内核都会将这些命令解释为系统调用,这些系统调用将通过缓存检查现有数据块,直到它到达实际请求,然后此请求与系统中的所有其他请求一起排队,其他一些磁盘线程将获取您的请求,这意味着您的连接线程在等待响应时可能不可用,在那个时候,线程可以做一些工作

为什么你认为你需要一个高清线程?如果它们都在读/写不同的文件,只需在连接线程中内联执行即可。在这里,你是在为自己制造一根杆子。我的印象是,机械硬盘一次只能从一个位置读写,因此产生20000个线程(来自传入的客户端请求)来同时创建或查看不同的文件根本不起作用。也许我大错特错了?它会起作用的。有一个队列,实际上有几个。你不需要再加一个,太棒了。请花点时间解释一下硬盘上的线程是如何天生形成有序队列的?我会很高兴地发现,我的头脑中的事情过于复杂化了。@iForgotMyLogin假设在操作系统内部没有队列。你认为会发生什么?这不是答案。