Javascript中的new的实现

function objectFactory() {
  const obj = new Object()

  // [].shift.call(arguments) 删除并拿到arguments的第一项
  Constructor = [].shift.call(arguments)

  obj.__proto__ = Constructor.prototype
  console.log(Constructor)

  const ret = Constructor.apply(obj, arguments)

  return typeof ret === 'object' ? ret : obj
}

console.log(objectFactory('345'))
### 页面调度轮转算法(Round Robin Algorithm) #### 定义与原理 轮转调度算法是一种常见的进程调度方法,在页面调度中同样适用。此算法的核心在于将固定长度的间片分配给各个任务,确保每个任务都能获得一定的处理机间[^4]。 当一个任务被加载到内存并开始运行,它会得到预先设定好的间片用于执行。如果在这个间段内未能完成,则会被暂停并将剩余部分重新加入就绪队列末端继续等待下一次调度机会。这种机制可以有效防止某些长间运行的任务独占CPU资源而造成其他短小任务长期得不到响应的情况发生[^5]。 #### 实现方式 为了实现上述逻辑,通常需要遵循以下几个方面: - **初始化阶段**:创建一个用来保存待处理任务列表的数据结构——通常是双向链表或者环形缓冲区形式的队列; - **设置合理的间片大小**:这取决于具体应用场景以及系统负载情况等因素综合考量的结果; - **核心循环体设计**: - 从队首取当前要被执行的任务; - 启动计器监控实际消耗了多少个单位间内该作业占用处理器工作; - 如果超了预定限额则强制中断其活动状态,并将其余下的指令序列送回原处排队等候下次调用; 以下是Python语言描述的一个简化版伪代码示例: ```python import time class Task: def __init__(self, name, burst_time): self.name = name self.burst_time = burst_time def round_robin(tasks, quantum): queue = tasks.copy() while queue: task = queue.pop(0) if task.burst_time > quantum: print(f"Executing {task.name} for {quantum} units.") task.burst_time -= quantum queue.append(task) # Put back to the end of the queue. yield f"{task.name}: Remaining Time={task.burst_time}" else: print(f"Executing and completing {task.name}.") yield f"{task.name}: Completed." ``` 这段程序模拟了一个简单的RR调度过程,其中`tasks`参数是一个由多个Task对象组成的列表,代表即将参与竞争计算资源的一系列候选者;`quantum`则是指定了单次允许的最大连续运作周期数。每当有一个新成员加入进来之后都会自动排在最后面依次轮流接受服务直到全部结束为止. #### 性能特点分析 对于轮转算法而言,最重要的两个影响因素分别是平均周转间和上下文切换开销。较小的间片有助于提高系统的交互性和多道程序度,但也增加了额外管理成本因为频繁地改变正在工作的线程会导致更多的寄存器保存/恢复动作。反之较大的值虽然减少了这类损耗却可能引发饥饿现象使得一些轻量级的小型事务迟迟无法真正意义上启动起来.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值