并发的操作系统以串行方式执行?
来自:Apple关于管理并发性的文档:
的NSOperation
编写一个自定义的子类并覆盖一个方法:main。 当NSOperationQueue安排它运行时,主方法被调用来执行操作。 以这种方式编写的NSOperation类被称为非并发操作,因为开发人员不负责产生线程 - 多线程全部由超类处理。 (不要被术语混淆:仅仅因为一个操作是非并发的,并不意味着它不能同时执行,它只是意味着你不必自己处理并发。)
我认为重写main是使用NSOperation
最简单的方法,但苹果网站说它的非并发是否意味着nsoperation队列中的nsoperations(当只重载main)会连续执行?
我不想连续执行我的操作,但我希望尽可能以最小的努力平行操作。
不,他们不一定会连续运行。 正如您引用的段落所述,这并不意味着它不能同时执行。
那么确定它们是否可以并行运行呢? NSOperationQueue
和你在ops之间建立的任何依赖关系。 稍后在同一份文件中,标题为“正在运行的操作”一节解释:
在“并发编程指南”中,它阐述了:
在大多数情况下,操作在被添加到队列后不久被执行,但操作队列可能由于以下任何原因而延迟排队操作的执行。 特别是,如果排队的操作依赖于尚未完成的其他操作,则执行可能会延迟。 如果操作队列本身暂停或正在执行其最大并发操作数,则执行也可能会延迟。
你通过使用非并发操作放弃的是操作本身不是用来设置新线程等。
我不确定,但我正在使用“dispatch_queue_create”创建并行进程。 假设如果我想同时做两个功能,我使用下面的代码。 请看看它是否会帮助你,
dispatch_queue_t queue = dispatch_queue_create("FirstOperation", 0ul);
dispatch_async(queue, ^{
//Do your functionality here
dispatch_sync(dispatch_get_main_queue(), ^{
//Do your UI updates here
});
});
dispatch_release(queue);
dispatch_queue_t queue2 = dispatch_queue_create("SecondOperation", 0ul);
dispatch_async(queue2, ^{
//Do your functionality here
dispatch_sync(dispatch_get_main_queue(), ^{
//Do your UI updates here
});
});
dispatch_release(queue2);
链接地址: http://www.djcxy.com/p/65121.html