Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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
Multithreading 如何限制文件夹中的文件数(限制队列中的文件上载)?_Multithreading_Algorithm_File Upload_Limit_Semaphore - Fatal编程技术网

Multithreading 如何限制文件夹中的文件数(限制队列中的文件上载)?

Multithreading 如何限制文件夹中的文件数(限制队列中的文件上载)?,multithreading,algorithm,file-upload,limit,semaphore,Multithreading,Algorithm,File Upload,Limit,Semaphore,我有一个应用程序,允许用户上传文件到云。过程如下所示: 用户将文件放置在指定的文件夹中 正在侦听此文件夹,一旦文件被放入,它将调用一个函数(多线程)来加密文件并将其存储在中间文件夹中 应用程序的另一部分在时间间隔内从中间文件夹中提取加密文件,并将其上载(多线程)到云。因此: 用户将文件添加到文件夹A->将文件复制并加密到文件夹B并从文件夹A中删除->将文件夹B中的加密文件上载到云中并从文件夹B中删除 我想限制中间文件夹B中的文件数量,因为这些文件可能非常大。例如,如果文件夹B中复制了5个加密文件

我有一个应用程序,允许用户上传文件到云。过程如下所示:

  • 用户将文件放置在指定的文件夹中
  • 正在侦听此文件夹,一旦文件被放入,它将调用一个函数(多线程)来加密文件并将其存储在中间文件夹中
  • 应用程序的另一部分在时间间隔内从中间文件夹中提取加密文件,并将其上载(多线程)到云。因此:
  • 用户将文件添加到文件夹A->将文件复制并加密到文件夹B并从文件夹A中删除->将文件夹B中的加密文件上载到云中并从文件夹B中删除

    我想限制中间文件夹B中的文件数量,因为这些文件可能非常大。例如,如果文件夹B中复制了5个加密文件,则下一次加密应等到5个加密文件中的至少一个已上载到云;基本上就像一个队列

    我曾经考虑过,如果输入的5还没有完成上传,就用信号量来阻止加密。然而,加密和上传在代码库的不同部分,本质上是不同的函数/类,所以我认为我无法做到这一点

    另一种方法是在加密之前使用while循环,并检查中间文件夹中的文件数,如果少于X,则允许加密和上载,否则继续循环


    如果您认为这种方法有任何问题,请告知我,因为您知道一种更好的设计。

    您可以使用消息队列(类似RabbitMQ)来发布中间文件夹可以接收新文件的事件。代码的加密段可以侦听此类事件以将新文件推送到中间文件夹