Mac允许的最大线程数

时间:2018-10-17 19:03:50

标签: multithreading macos

macOS报告错误之前允许的最大线程数是多少?我找不到一个简单的答案。我相信它是125,但是我怎么找到这个呢?感谢您的帮助

2 个答案:

答案 0 :(得分:1)

正如我的评论中所述,这显然取决于macOS版本。

我不知道确切的限制,但是macOS肯定会每个进程支持125个以上的线程。

您可以很容易地对此进行测试:

#import <Foundation/Foundation.h>

static NSLock * lock;

int main( void )
{
    @autoreleasepool
    {
        lock = [ NSLock new ];

        for( int i = 0; i < 10000; i++ )
        {
            [ NSThread detachNewThreadWithBlock: ^( void )
                {
                    [ lock lock ];

                    NSLog( @"Thread %i", i );

                    [ lock unlock ];

                    while( 1 )
                    {
                        [ NSThread sleepForTimeInterval: 1 ];
                    }
                }
            ];
        }

        while( 1 )
        {
            [ NSThread sleepForTimeInterval: 1 ];
        }
    }

    return 0;
}

在运行macOS 10.14的MacBookPro 2018上,我可以产生8000多个线程。

真实数字为 8188
因为有一个主线程,外加3个专用于调度队列的线程,所以我们可以假设限制为8192,这完全合情合理。

但是,这仍然取决于硬件,CPU /核的数量。

请注意,如果您担心最大线程数,则不应使用线程。

相反,请使用dispatch queues provided by Grand Central Dispatch (CGD)

dispatch_async
(
    dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_HIGH, 0 ),
    ^( void )
    {
        /* ... */
    }
);

您显然可以创建自己的串行或并发队列:

dispatch_queue_create( "MyQueue", DISPATCH_QUEUE_CONCURRENT );

在并发调度队列上,这将使macOS管理可用资源,并在可行时生成新线程。

这是应使用并发的方式。试着忘记线程,然后简单地开始使用GCD。

答案 1 :(得分:1)

每个进程仅2048个线程。更多尝试会在pthread_create中导致代码35: enter image description here