草庐IT

阻塞队列--LinkedBlockingQueue

全部标签

ios - 在后台队列上创建和销毁 AVFoundation 类?

我试图消除在主线程上分配AVPlayer、AVPlayerItem和AVURLAsset时发生的一些主线程性能影响。有没有人有将这些对象的分配/释放移动到后台线程的经验?同样,AVPlayer的currentItem是否可以设置在后台队列上? 最佳答案 以下肯定会影响滚动性能创建AVPlayer,10fps下降将播放器添加到AVPlayerLayer,15fps下降开始播放,15/25fps下降暂停播放,15fps下降取消分配AVPlayer,帧数下降20+我尝试从后台线程分配AVPlayer,但是,AVFoundation将切换回

ios - 在 GCD 中,是否保证串行队列中的所有任务都在同一个线程中运行?

在GCD中,串行队列(例如主队列)中的所有任务都保证在同一线程中运行吗? 最佳答案 一般对于串行队列,没有。来自theConcurrencyProgrammingGuide:Serialqueues(alsoknownasprivatedispatchqueues)executeonetaskatatimeintheorderinwhichtheyareaddedtothequeue.Thecurrentlyexecutingtaskrunsonadistinctthread(whichcanvaryfromtasktotask)t

ios - 预填充 UICollectionView 单元重用队列

问题我有一个带有单个UICollectionView的应用程序,它在我第一次滚动它时出现卡顿。我已将来源缩小到正在创建新单元格(2)(使用initWithFrame:)这一事实,因为周围没有可重复使用的单元格。在初始滚动之后,重用队列不为空,并且可以重用单元格并且没有卡顿。黑客攻击所以我已经能够在iOSruntimeheaders中的私有(private)方法的帮助下解决这个问题。:-(void)_reuseCell:(id)arg1;我的假设是,这是将单元添加回重用队列的地方。使用这种未记录的方法的技巧如下所示:intprefillCellCount=10;NSMutableArra

ios - 为自定义创建的串行异步队列设置优先级

如何使用GCD为自定义创建的串行异步队列设置高优先级?我看过thisQ&A其中建议使用dispatch_set_target_queue()并传递高优先级队列(DISPATCH_QUEUE_PRIORITY_HIGH),这是自定义串行异步队列的并发队列。我的理解是,这将使串行队列上的所有任务并发执行。我的理解正确吗?如果是这样,替代解决方案是什么? 最佳答案 在iOS8之前,将目标队列设置为高优先级队列是实现此目的的方法。即使目标队列是并发的,您的队列也将保持串行。从8.0版开始,还有另一种方法可以做到这一点:dispatch_qu

ios - 无形的执行顺序(dispatch_semaphore_t、dispatch_group_async)以及它们与不同调度队列类型的结合使用

我只是在晚上花了一些时间来研究GCD,尤其是dispatch_semaphore_t,因为我从未使用过它。从来不需要。所以我写了下面的作为测试:-(void)viewDidLoad{UIView*firstView=[[UIViewalloc]initWithFrame:(CGRect){{0,0},self.view.frame.size.width/4,self.view.frame.size.width/5}];firstView.backgroundColor=[UIColorpurpleColor];[self.viewaddSubview:firstView];dispat

iphone - 如何创建一个始终串行的 GCD 队列,即使在多核 CPU 上也是如此?

据我了解非主队列GCD队列,默认情况下它们仅在具有单核CPU的设备上是串行的。但是,如果设备具有多个内核,则可能会同时执行队列中的block。我想使用串行GCD队列来克服一些并发问题,即使有多个内核,这个队列也必须是串行的。一位开发人员提到这在某种程度上是可能的。我将如何创建这样一个始终串行的队列? 最佳答案 可以通过dispatch_get_global_queue函数获得的标准GCD队列确实是并发的。但是您可以使用dispatch_queue_create创建自定义gcd队列功能。将DISPATCH_QUEUE_SERIAL作为

ios - dispatch_queue_set_specific 与获取当前队列

我试图弄清楚这两者之间的区别和用法:staticvoid*myFirstQueue="firstThread";dispatch_queue_tfirstQueue=dispatch_queue_create("com.year.new.happy",DISPATCH_QUEUE_CONCURRENT);dispatch_queue_set_specific(firstQueue,myFirstQueue,(void*)myFirstQueue,NULL);问题#1这有什么区别:dispatch_sync(firstQueue,^{if(dispatch_get_specific(my

ios - 在当前队列上同步调度

我知道您可能会觉得这是一个奇怪的问题,但我只是在学习GCD,我想全面了解它的各个方面。所以这里是:是否有任何理由在CURRENTQUEUE上调度任务SYNC?例如:dispatch_queue_tconcurrentQueue=dispatch_get_global_queue(...);dispatch_async(concurrentQueue,^{//thisisworktask0//firstdosomethinghere,thensuddenly:dispatch_sync(concurrentQueue,^{//worktask1});//continueworktask0

ios - 暂停调度队列是否会暂停其目标队列?

我想创建两个串行队列A和B。其中队列B是队列A的目标。我想在B上排队一些block,并暂停它直到我准备好执行它们,但是我想继续执行队列A上的block。如果我暂停B,这是否也会暂停它的目标队列(队列A)?我的想法是我想安排这些特定的block(在队列B上)在以后(未指定的)日期执行,但是我不希望它们同时运行(这涉及核心数据^_^)并且我不想处理信号量。但是我希望队列A继续处理它的block,而B被暂停如果不清楚这里有一些示例代码dispatch_queue_tqueueA=dispatch_queue_create("app.queue.A");dispatch_queue_tqueu

ios - swift 3 中的调度队列显示为未解析的标识符

这个问题在这里已经有了答案:Swift3.0unresolvedidentifierforDispatchQueue(2个答案)关闭6年前。我正在尝试在主线程上异步拍摄/录制视频。然而,当我调用dispatch.main.async时,我总是得到错误:useofunresolvedidentifierDispatchQueue从WWDC到Apple的文档,我到处都看过,但没有看到任何类型被弃用的证据。代码如下:if!self.cameraEngine.isRecording{ifleturl=CameraEngineFileManager.temporaryPath("video.mp