zoukankan      html  css  js  c++  java
  • 关于NSOperationQueue,一个容易让初学者误解的问题

          凡是学习NSOperationQueue的人,都会遇到setMaxConcurrentOperationCount这个函数。在网上的许多博文中,都将setMaxConcurrentOperationCount解释为“设置线程池中的线程数”,我觉得这是一种以讹传讹的说法,相当不准确,容易误导初学者,至少我曾经就被误导过。实际上,NSOperationQueue 可以认为是线程池,但setMaxConcurrentOperationCount并不是设置在其中运行的线程数,看看官方文档:

        setMaxConcurrentOperationCount: 

        Sets the maximum number of concurrent operations that the receiver can execute.

         从描述中可以看出,该函数设置的是queue里面最多能并发运行的operation个数,而不是线程个数,因为一个operation并非只能运行一个线程,看以下代码:

    -(void)test
    {
        NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
            
            
            for (int i = 0; i<100;i++)
            {
                NSLog(@"%@:i=%d",[NSThread currentThread] ,i);
            }
        }];
        
        [op1 addExecutionBlock:^{
            
            for (int m = 0; m<100;m++)
            {
                NSLog(@"%@:m=%d",[NSThread currentThread],m);
            }
        }];
        
        NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
            
            
            for (int j = 0; j<100;j++)
            {
                NSLog(@"%@:j=%d",[NSThread currentThread] ,j);
            }
        }];
        [op2 addExecutionBlock:^{
            
            for (int k = 0; k<100;k++)
            {
                NSLog(@"%@:k=%d",[NSThread currentThread],k);
            }
        }];
        
        
        
        
        NSOperationQueue *q = [[NSOperationQueue alloc]init];
        [q setMaxConcurrentOperationCount:2];
        [q addOperation:op1];
        [q addOperation:op2];
        [q setSuspended:NO];
    }

        以上代码向queue里面放入了两个operation,每个operation两个block,然后设置并发数为2,猜猜queue运行时,里面几个线程在输出log?当然不是2个,而是4个,因为blockOperation里面的block也是在不同的线程上并发运行的,因此就有4个线程在并发运行。

     

  • 相关阅读:
    一个自动打补丁的脱机程序
    OPC 学习交流感想
    串口标准,说说流控制(RTS/CTS/DTR/DSR 你都明白了吗?)
    asp.net中调用COM组件发布IIS时常见错误 80070005解决方案
    可运行XP的最少后台服务配置
    MapGIS 7.0 SP2 企业版 & MapGIS 7.1IMS
    简单认识一下S60系统
    常用正则表达式
    图像处理:遮罩
    office2003中WORD中visio图无法打印中文问题解决方法
  • 原文地址:https://www.cnblogs.com/gugupluto/p/3420627.html
Copyright © 2011-2022 走看看