gpt4 book ai didi

objective-c - 通过许多不同的 GCD 队列访问硬盘是否安全?

转载 作者:行者123 更新时间:2023-12-03 16:23:45 28 4
gpt4 key购买 nike

安全吗?例如,如果我创建一堆不同的 GCD 队列,每个队列都压缩 (tar cvzf) 一些文件,我是否做错了什么?硬盘会被破坏吗?

或者系统是否正确处理这些事情?

最佳答案

迪特里希的答案是正确的,除了一个细节(完全不明显)。

如果您要通过 GCD 分拆 100 个异步 tar 执行,您很快就会发现您的应用程序中有 100 个线程在运行(这也会因为总体速度而变得非常慢)滥用 I/O 子系统)。

在带有队列的完全异步并发系统中,无法知道特定工作单元是否因为正在等待系统资源或正在等待某些其他排队的工作单元而被阻塞。因此,任何时候发生阻塞,您几乎都必须启动另一个线程并消耗另一个工作单元,否则就有锁定应用程序的风险。

在这种情况下,“明显”的解决方案是当一个工作单元阻塞时等待一会儿,然后再启动另一个线程以出队并处理另一个工作单元,希望第一个工作单元“解除阻塞” “并继续处理。

但是,这样做意味着任何在工作单元之间进行交互的异步并发系统(这是一种常见的情况)都会非常慢,以至于毫无用处。

更有效的方法是限制在任意时间排队到全局异步队列中的工作单元的数量。 GCD 信号量使这变得非常容易;您有一个串行队列,所有工作单元都排队到其中。每次将一个工作单元出队时,都会增加信号量。每次完成一个工作单元时,都会减少信号量。只要信号量低于某个最大值(例如 4),您就会将一个新的工作单元排入队列。

关于objective-c - 通过许多不同的 GCD 队列访问硬盘是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6082030/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com