C# 是否可以使用挂起写入、总写入和总写入字节数优化写入计划程序?

C# 是否可以使用挂起写入、总写入和总写入字节数优化写入计划程序?,c#,c++,.net,io,C#,C++,.net,Io,我想确认,这个面试问题基本上是不可能的: 这个项目的目标是创建一个设备的实现 可以将文件写入目录,然后设计写入 一组设备的调度系统。写调度系统 应包含名为WriteScheduler的接口和至少两个 它的具体实现。第一个应该是公平的循环赛 调度器和第二个应该是使用 挂起写入、总写入和总写入字节数的组合 以某种方式优化写入。此项目的所有代码都应 线程安全 给定一个未指定的接口,如何仅使用该数据优化调度程序?它说“…以某种方式优化写入” 因此,您尝试优化的具体内容显然完全取决于您。就这一点而言,您尝

我想确认,这个面试问题基本上是不可能的:

这个项目的目标是创建一个设备的实现 可以将文件写入目录,然后设计写入 一组设备的调度系统。写调度系统 应包含名为WriteScheduler的接口和至少两个 它的具体实现。第一个应该是公平的循环赛 调度器和第二个应该是使用 挂起写入、总写入和总写入字节数的组合 以某种方式优化写入。此项目的所有代码都应 线程安全

给定一个未指定的接口,如何仅使用该数据优化调度程序?

它说“…以某种方式优化写入

因此,您尝试优化的具体内容显然完全取决于您。就这一点而言,您尝试的优化高度(或完全)成功可能并不特别重要


如果我不得不猜测,我想说他们可能最感兴趣的是C++的基本思想,即定义一个抽象接口,然后写一些接口的实现,这些接口至少有一些半意义的方式(但仍然符合接口规范)。 好,说到主题:

我可以想象您为我们提供的界面是这样的…

IDevice:这个接口甚至可以是空接口

设备:

  • 必须实现IDevice接口
  • 构造函数使用IWriteScheduler实例
  • 对于下一次操作,必须是线程安全的
  • 方法打开(字符串路径)
  • 方法创建(字符串路径)
  • 方法读取(输出字节[]缓冲区,int尝试读取)
  • 方法写入(在字节[]缓冲区中)
  • 方法close()
  • 设备将锁定所有公共方法
  • 所有方法都可能被阻塞
现在,我将:

  • 任务WriteAsync(IDevice设备、整数大小、动作写入任务)
设备行为:

  • 处于写入操作中的设备将使用操作创建操作 要将数据写入文件
  • 调用IWriteScheduler的实例: WriteScheduler.WriteAsync(此,41561,操作),然后等待它
  • 或者设备可以将任务返回给写操作的调用方, 让它决定等待是否合适
  • 就这些,
WriteScheduler:

  • 将实施IWriteScheduler
  • 必须锁定WriteAsync操作
  • 私有类设备数据 {IDevice,total_字节,pending_写入,total_写入,Task last_Task} 初始的最后一个任务必须是任务完成,可以在下创建 较旧的.net版本
  • 必须实现字典
  • 虚拟写同步方法,默认实现为 循环赛, 在BlockingWrite方法中,调度程序将更新 根据字典键IDevice和上次使用的任务更正设备数据 要通过基于ContinueWith的链接启动下一个的DeviceData
  • 简单的任务链接将确保循环调度
其他调度方法只需从WriteScheduler继承,覆盖:

虚拟任务WriteAsync(IDevice设备、整数大小、动作写入任务)

任务链允许在写操作和更多技巧上甚至延迟

对于基于挂起的_写入、总的_写入和总的_字节的调度,有许多方法可以调度和构建此类数据结构可以处理的特定规则:

  • 每秒可能有写入次数
  • 每秒可能有个字节
  • 这有助于防止硬盘烧坏:)
  • 可以通过插入具有 thread.sleep什么会起作用,但会很糟糕:)
  • 更好的延迟解决方案是DeviceData中的Thread.Timer 和一个写作任务队列
我希望这会有所帮助,我提供了对接口实现的分析和一些计划场景的想法…


/IP/

听起来他们想让你用一种策略模式来描述一些事情: