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个线程在并发运行。

     

  • 相关阅读:
    HTML 页面的 批量删除的按钮
    HTML 选择器
    ....
    java 反射机制
    插件库
    向上滚动
    浮动元素定位float
    中文字体对应的英文名称
    echarts入门教程
    ie9浏览器window.openbug
  • 原文地址:https://www.cnblogs.com/gugupluto/p/3420627.html
Copyright © 2011-2022 走看看