对软件的架构进行优化需要综合考虑各种因素。
案例:处理任务模型采取的方法:经典的是生产者与消费者模式
单队列-多线程模型
ZFS采用的是单个队列,然后的32个ZVOL线程从该队列中抓取请求并处理,这种结构,当时考虑是否会有大量的进程上下文的切换,后来想了想不太会有这种问题,因为每个ZVOL都会处理DMU里面的逻辑,外加可能会等待提交日志工作,也就是处理的任务都是耗时的任务。
队列与线程一一对应模型
这种模型是为每一个线程创建一个队列,然后上层将请求分发到各个线程的队列中,这样避免大量的锁的冲突。这种模型适合短任务型,因为短任务处理时间短,返回的也很快。如果采用第一种线程模型会发生大量的锁的切换。
所以,对于短任务 采用线程与队列一一对应的方式,对于长任务,采用ZFS的单队列-多线程模型。
阅读(2240) | 评论(0) | 转发(0) |