C# 是否可以使用挂起写入、总写入和总写入字节数优化写入计划程序?
我想确认,这个面试问题基本上是不可能的: 这个项目的目标是创建一个设备的实现 可以将文件写入目录,然后设计写入 一组设备的调度系统。写调度系统 应包含名为WriteScheduler的接口和至少两个 它的具体实现。第一个应该是公平的循环赛 调度器和第二个应该是使用 挂起写入、总写入和总写入字节数的组合 以某种方式优化写入。此项目的所有代码都应 线程安全 给定一个未指定的接口,如何仅使用该数据优化调度程序?它说“…以某种方式优化写入” 因此,您尝试优化的具体内容显然完全取决于您。就这一点而言,您尝试的优化高度(或完全)成功可能并不特别重要C# 是否可以使用挂起写入、总写入和总写入字节数优化写入计划程序?,c#,c++,.net,io,C#,C++,.net,Io,我想确认,这个面试问题基本上是不可能的: 这个项目的目标是创建一个设备的实现 可以将文件写入目录,然后设计写入 一组设备的调度系统。写调度系统 应包含名为WriteScheduler的接口和至少两个 它的具体实现。第一个应该是公平的循环赛 调度器和第二个应该是使用 挂起写入、总写入和总写入字节数的组合 以某种方式优化写入。此项目的所有代码都应 线程安全 给定一个未指定的接口,如何仅使用该数据优化调度程序?它说“…以某种方式优化写入” 因此,您尝试优化的具体内容显然完全取决于您。就这一点而言,您尝
如果我不得不猜测,我想说他们可能最感兴趣的是C++的基本思想,即定义一个抽象接口,然后写一些接口的实现,这些接口至少有一些半意义的方式(但仍然符合接口规范)。 好,说到主题: 我可以想象您为我们提供的界面是这样的… IDevice:这个接口甚至可以是空接口 设备:
- 必须实现IDevice接口
- 构造函数使用IWriteScheduler实例
- 对于下一次操作,必须是线程安全的
- 方法打开(字符串路径)
- 方法创建(字符串路径)
- 方法读取(输出字节[]缓冲区,int尝试读取)
- 方法写入(在字节[]缓冲区中)
- 方法close()
- 设备将锁定所有公共方法
- 所有方法都可能被阻塞
- 任务WriteAsync(IDevice设备、整数大小、动作写入任务)
- 处于写入操作中的设备将使用操作创建操作 要将数据写入文件
- 调用IWriteScheduler的实例: WriteScheduler.WriteAsync(此,41561,操作),然后等待它
- 或者设备可以将任务返回给写操作的调用方, 让它决定等待是否合适
- 就这些,
- 将实施IWriteScheduler
- 必须锁定WriteAsync操作
- 私有类设备数据 {IDevice,total_字节,pending_写入,total_写入,Task last_Task} 初始的最后一个任务必须是任务完成,可以在下创建 较旧的.net版本
- 必须实现字典
- 虚拟写同步方法,默认实现为 循环赛, 在BlockingWrite方法中,调度程序将更新 根据字典键IDevice和上次使用的任务更正设备数据 要通过基于ContinueWith的链接启动下一个的DeviceData
- 简单的任务链接将确保循环调度
- 每秒可能有写入次数
- 每秒可能有个字节
- 这有助于防止硬盘烧坏:)
- 可以通过插入具有 thread.sleep什么会起作用,但会很糟糕:)
- 更好的延迟解决方案是DeviceData中的Thread.Timer 和一个写作任务队列
/IP/听起来他们想让你用一种策略模式来描述一些事情: