multithreading - Cocoa NSApplication 线程模型

标签 multithreading macos cocoa grand-central-dispatch nsapplication

您好,我是 cocoa 框架的新手,因此需要帮助来更好地理解该框架。

我当前的重点领域是了解 NSApplication 默认创建的线程数以及控制或限制它的方法。也就是说,我看到创建了一个空窗口的基本 NSApplication 创建了 6 个线程并利用了它。我想了解以下内容。

1)有没有办法限制线程数? 2)默认情况下,NSApplication使用GCD(Grand Central Dispatch),有什么方法可以禁用它吗?

我正在寻找这些问题,因为我想从头开始实现我自己的线程模型......

而且我确实知道 GCD 效率更高并且可以为我进行线程管理。我只是在尝试并想知道。

所以请分享一些见解或为我指出正确的方向。 提前致谢

最佳答案

你问:

Is there any method to limit the number of threads?

从你的问题的上下文来看,我假设你的意思是,“有没有任何方法可以限制 AppKit 使用的线程数?”,答案实际上是“没有”。通过使用 AppKit,您就隐式接受了它想要在幕后使用的任何线程模型。这是一个黑匣子。当然,在 OS X 上编写单线程可执行文件(即命令行工具)在物理上是可能的,但是在不使用 AppKit 的情况下在 OS X 上显示任何类型的有意义的 GUI 将是一个很多事情 的工作。

By default the NSApplication makes use of GCD (Grand Central Dispatch) is there any way to disable it?

再说一遍,不。同样的原因。

I want to implement my own threading model from scratch...

稍微过于简化,但线程模型在某种程度上是由操作系统决定的。您编写的任何使用 mach 线程(pthread 所基于的、GCD 所基于的等)的内容都不会“实现您自己的线程模型”,它会与其他人使用的线程模型相同。同样,(在 OS X 上)如果您最终不使用 mach 线程,则无法在同一进程中启动真正并发的执行线程(因为只有内核可以做到这一点),因此在结束时有一天,您将实现一个协作多任务系统(只能在一个核心上运行)或 fork 多个进程并使用共享内存或其他东西在它们之间进行协调(如果您这样做,您仍然有效地使用 mach线程,它们只是位于内核创建的不同进程中。)

如果您想修改自己的线程池实现,就这样做,并忽略 AppKit 的后台线程。在任何 AppKit 应用程序中,主线程始终是“特殊的”,因此您也必须忽略这一事实,但如果您要编写线程池,请不要让 AppKit 所做的任何事情分散您的注意力。

如果您真的想修改底层线程模型,那么您最好找到一个学术/研究操作系统(Google 提供有关操作系统的在线大学类(class))并修改其内核调度程序/线程模型,而不是试图在 OS X 等庞大、成熟、大众市场、安全意识操作系统中重新发明轮子。

关于multithreading - Cocoa NSApplication 线程模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24628379/

相关文章:

创建一个新的瘦进程、 fork 还是线程?

java - 模拟的GUI渲染

objective-c - 每次在核心数据中插入数据后,应用程序变得更慢

objective-c - 使用 WebView 从 Google map 获取 Cocoa/Objective-C 回调

objective-c - 这是正常的自动终止行为吗?

macos - 我需要以没有预定义 UTI 的格式打开文件,但我不拥有该格式。我应该如何导出UTI?

iphone - 如何在NSOperation中实现异步网络调用

multithreading - Haskell Windows hPutStrLn不会在网络句柄上阻止

c++ - fatal error : string. h:没有那个文件或目录

java - 静默调用 java,Mac Os X