Mac 允许的最大线程数

2024-01-22

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/核心的数量。

顺便说一句,如果您担心最大线程数,那么您不应该使用线程。

相反,使用Grand Central Dispatch (CGD) 提供的调度队列 https://developer.apple.com/documentation/dispatch?language=objc:

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

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

dispatch_queue_create( "MyQueue", DISPATCH_QUEUE_CONCURRENT );

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

这就是您应该使用并发的方式。尝试忘记线程,直接开始使用 GCD。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mac 允许的最大线程数 的相关文章

  • Android GPS 回调关闭 UI 线程

    我无法让 GPS 的 onLocationChanged 在不同的线程上运行 我了解在调用函数时如何管理 UI 线程 但使用 GPS 我不会主动调用该函数 我的目的是每次 GPS 接收到读数时都会有灯光闪烁 我已将此函数放入 Runnabl
  • Node.js 多线程程序

    我编写了一个 node js 脚本来从交易所获取一些价格 它看起来像这样 async function main async function func var start time performance now for let rout
  • 在 REDIS+RABBITMQ+Celery 中访问 Postgres DB 会使用“信号 11 (SIGSEGV) 终止 Python 任务”

    当我们运行 SQL 命令时 例如 video Video objects get pk 1 在Python视图中 它工作没有任何问题 然而 如果在定义为 celery 的方法中启动 shared task 它死了并杀死了PythonERRO
  • Java 有没有办法记录*每个*线程中断?

    我想每次都以某种方式记录Thread interrupt 被调用 记录哪个线程发出调用 及其当前堆栈 以及识别有关哪个线程被中断的信息 有没有办法做到这一点 在搜索信息时 我看到有人提到实施安全管理器的可能性 这是可以在运行时完成的事情 例
  • 如何处理 ASP.NET 中未处理的线程异常?

    ASP NET 应用程序应该如何处理非请求后台线程上发生的未处理的异常 由于错误 默认情况下 此类异常会导致进程终止 这在 ASP NET 工作进程的设置中是不可接受的因为并发运行的请求会不可预测地中止 这也是一个性能问题 请求线程上的异常
  • 如何启用/禁用聚合 CoreAudio 设备的输入或输出通道?

    我已经仔细阅读了该主题中的问题和答案 如何从聚合 CoreAudio 设备中排除输入或输出通道 https stackoverflow com questions 60445512 how to exclude input or outpu
  • DropDelegate Safari 拖动图像

    我正在尝试实施DropDelegate模式以允许将图像拖到我的视图中并加载它们 这对于取景器中的图像效果很好 但是当将图像从 safari 拖到我的视图中时 这不起作用 我注意到typeIdentifier or UTType所提供的信息
  • openssl/ssl.h 未找到,但已通过自制程序安装

    我正在运行 El Capitan 的 Mac 上开发一个 C 项目 即使在使用 Homebrew 安装 openssl 后也会出现此错误 g Wall g std c 11 I libSocket src I libData src c s
  • 如何在 m1 Mac 上安装 pandas

    clang Wno unused result Wsign compare Wunreachable code fno common dynamic DNDEBUG g fwrapv O3 Wall iwithsysroot System
  • 在 Mac 上安装 imagick

    我需要安装 php 的 imagick 扩展 我已经安装了 Image Magick 然后我做了 sudo pecl install imagick 之后我在控制台中有这样的输出 安装 usr include php ext imagick
  • 完成 tmux 重置

    我想知道是否可以完全重置 tmux 主要是 UI 我尝试过删除我的 tmux conf并重新安装 tmux 它 但我总是得到与我定义的相同的状态栏 忘记终止现有会话 tmux kill server 是解决方案 致谢 Kent
  • Linux 内核 - 如何停止等待信号量的 kthread?

    在编写 Linux 内核模块时 我遇到了一个 kthread 问题 在等待信号量解锁时无法唤醒该 kthread 这会导致线程不可停止并且rmmod尝试卸载模块时冻结 请注意 该模块在 3 10 内核上运行 我无法将其更新到较新的版本 客户
  • 快速变化的集合 MVVM WPF - 高 CPU 使用率和 UI 几乎冻结

    我正在开发一个带有数据网格的应用程序 它显示某些正在运行的 Windows 进程 在我的示例 Chrome 进程中 当选中复选框时 数据网格会加载进程 要求 显示每个进程的名称 内存使用情况 私有工作集 的 实时 信息 就像在 Window
  • Android 相机:线程?哪个应该做什么

    我试图弄清楚哪些线程应该在 Android 中执行哪些操作 我发现官方文档中唯一说明的是camera open 应该放入它自己的线程中 关于什么 camera startPreview camera stopPreview camera r
  • 无法在 mac 屏幕保护程序发布版本上加载图像(它适用于 Xcode 调试版本)

    我从这里得到了这个 mac 屏幕保护程序示例here https github com elpsk PaskySaver 我将其更改为显示图像而不是文本字段 问题是这样的 它可以显示任何 Xcode 对象 例如 textView textF
  • 从 Xcode 中的 OSX 模拟器删除应用程序

    如何像在 iOS 模拟器上一样从 OSX 模拟器中删除应用程序 由于核心数据 xcdatamodeld 的更改 我想删除一个应用程序 但我找不到方法 提前致谢 对于 macOS Monterey 和 Big Sur 该位置链接到设备文件夹位
  • Flask 从线程中删除会话变量

    我尝试实施投票系统 它的工作原理是这样的 如果用户对帖子进行投票 我会在会话变量中记录其临时状态 已投票 已加星标等 如果当前用户在我将结果保存到临时表之前尚未投票 用户可以在 5 分钟内更改投票 5 分钟后 结果将使用线程永久写入数据库
  • 强制将应用程序窗口保持在顶部 - Mac OS X

    早些时候我用 Afloat 来做这个 但现在它似乎已经死了 是否有任何活着的软件或任何简单的 方便 方法可以强制将应用程序窗口保持在其他窗口之上 包括全屏应用程序 我可以想象这可以通过向 app 内的 plist 文件添加一些内容来完成
  • 如何在 Sublime 2 REPL Mac 中运行 Python 3

    我的问题如下 我安装了 sublime 2 和 sublime repl 插件 一切正常 我唯一需要的是更改在控制台内置的 sublimerepl 上运行的 python 版本 我的意思是 我有 python 2 7 5 预先安装了 mav
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐