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