在报告错误之前,macOS 允许的最大线程数是多少?我找不到一个简单的答案。我相信是 125,但是我怎样才能找到这个呢?感谢您的帮助
最佳答案
正如我的评论中所述,这显然取决于 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。
关于multithreading - Mac 允许的最大线程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52861928/