问题标签 [grand-central-dispatch]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
1296 浏览

language-agnostic - Grand Central vs 并行扩展

有谁知道苹果(Snow Leopard)即将推出的“Grand Central”技术的任何好的网站,以及它与来自微软的并行扩展(和本机并行计算的东西)相比如何?

0 投票
6 回答
2115 浏览

objective-c - 学习积木的推荐资源

学习 Mac OS X 和 iOS 中的块和 GCD 有哪些好的建议资源

0 投票
3 回答
2333 浏览

macos - 为什么我应该在 OpenMP 上使用 Grand Central Dispatch?

Apple 在 Snow Leopard 中引入了 Grand Central Dispatch(一个线程池),但没有说明为什么应该在 OpenMP 上使用它,OpenMP 是跨平台的,也适用于 Leopard。它们都非常易于使用并且在功能上看起来相似。那么,有什么想法吗?

0 投票
2 回答
596 浏览

macos - Grand Central Dispatch 与 Cilk++

有人对 Grand Central Dispatch(现已由 Apple 开源)和 Cilk++ 有任何想法吗?比较/对比?Cilk 是否更仅限于 Windows?

0 投票
4 回答
2880 浏览

functional-programming - 不同的编程语言如何使用闭包?

据我所知,结合其他人的知识,在主流语言中

  • 目标 C
  • C#
  • VB.net
  • 爪哇
  • Python
  • 红宝石
  • Javascript
  • 语言
  • Perl

有闭包和匿名函数。普通的 C/C++ 没有这些。

这些语言中的闭包是否具有相同的语义?它们对于日常编程有多重要?

一些背景知识:我一直在阅读针对 Apple 的 Grand Central Dispatch 的Objective C的新增功能,并认为我应该了解是否真的只有一种不同的方法可以将块状结构引入语言。

0 投票
2 回答
964 浏览

cocoa - Cocoa 中的并发网络客户端

我正在尝试在脑海中找出构建 Cocoa 应用程序的最佳方式,该应用程序本质上是一个并发下载管理器。有一个应用程序与之对话的服务器,用户列出了很多要下拉的东西,然后应用程序处理该列表。(它没有使用 HTTP 或 FTP,所以我不能使用 URL 加载系统;我将讨论套接字连接。)

这基本上是经典的生产者-消费者模式。诀窍是消费者的数量是固定的,而且他们是持久的。服务器对可以同时打开的连接数(尽管通常至少两个)设置了严格的限制,并且打开新连接的成本很高,因此在理想情况下,相同的 N 个连接在应用程序的整个生命周期内都是打开的。

解决此问题的一种方法可能是创建 N 个线程,每个线程都将“拥有”一个连接,并在请求队列上等待,如果它为空则阻塞。由于连接的数量永远不会很大,这在实际系统开销方面并非不合理。但从概念上讲,Cocoa 似乎必须提供更优雅的解决方案。

似乎我可以使用, 并使用连接数进行NSOperationQueue调用。setMaxConcurrentOperationCount:然后我只是将下载请求扔到那个队列中。但在这种情况下,我不确定如何自己管理连接。(只需将它们放在堆栈上,并依靠队列来确保我不会过度运行/运行不足?与堆栈一起投入调度信号量?)

现在我们处于Grand Central Dispatch的美丽新世界,这是否开辟了解决这个问题的任何其他方法?乍一看,它看起来不像,因为 GCD 动态扩展并发的旗舰能力(在 Apple 关于改变生产者-消费者实现的建议中提到)实际上并没有帮助我。但我只是触及了阅读它的皮毛。

编辑:

万一这很重要:是的,我计划使用异步/非阻塞套接字 API 与服务器进行实际通信。所以 I/O 本身不必在自己的线程上。我只关心排队工作的机制,并(安全地)将其分配给连接,因为它们变得可用。

0 投票
3 回答
36922 浏览

objective-c - 调度队列:如何判断它们是否正在运行以及如何停止它们

我只是在玩 GCD,我写了一个玩具 CoinFlipper 应用程序。

下面是抛硬币的方法:

如你看到的; 我将翻转次数分解为大块,在后台翻转它们并更新主队列中的属性。窗口控制器正在观察这些属性,并使用运行结果更新 UI。

我查看了并发编程指南和 GCD 文档,虽然有一种方法可以暂停队列,但没有办法停止它们,并删除所有排队和未运行的对象。

我希望能够连接一个“停止”按钮来取消翻转一旦开始。NSOperationQueue我可以观察该operationCount属性以了解它是否正在运行,并删除cancelAllOperations排队的块。

我查看了并发编程指南和 GCD 文档,虽然有一种方法可以暂停队列,但没有办法停止它们,并删除所有排队和未运行的对象。

所以 :-

  1. 如何判断我添加到队列中的块是否仍在等待?
  2. 如何取消尚未运行的块?
  3. 我是 GCD 的新手,所以我做得对吗?
0 投票
1 回答
1811 浏览

ios - Grand Central Dispatch 如何真正使用操作系统?

我对 GCD 的工作原理有一个扎实的了解,但我想了解更多关于吹捧的“操作系统管理”内部结构的信息。似乎几乎所有关于 Grand Central Dispatch 如何与“操作系统”配合使用的技术解释都完全不同。我将解释我的一些发现。

“它是一个对操作系统来说是全局的守护进程,它在许多内核上分配任务。”

我还没有傻到相信这一点。

“内核中内置了支持以了解所有 GCD 应用程序。GCD 应用程序与内核协同工作,以就如何管理应用程序内的线程做出逻辑决策。”

听起来这种同步方案比仅管理应用程序中的逻辑要慢得多。

“GCD 仅存在于应用程序中,并使用当前系统负载作为衡量其行为方式的指标。”

这对我来说听起来更现实,但我只在一个地方看到过这样的声明。

这里到底发生了什么?它只是一个库,还是一个完整的“系统”?

0 投票
2 回答
423 浏览

objective-c - Snow Leopard 和 Leopard 的一个代码库

背景

我是一名正在为 Mac 构建应用程序而苦苦挣扎的开发人员。我即将接触到雪豹。到目前为止,我一直在 Leopard 上进行构建。我只做了大约一年的 Cocoa 开发,并不是很紧张。

我读过很多关于雪豹和大中央调度的文章。我知道它使用积木,但我没有深入了解积木的工作原理或 Grand Central Dispatch 的工作原理。

我的问题

我如何最好地为 Snow Leopard 和 Leopard 开发一个代码库,同时最大限度地利用 Snow Leopard 中新的多线程功能?

NSOperationQueue

我的直觉不是直接在我的代码中处理 GCD,但是当需要放入队列时,请使用 NSOperationQueue,因为我从 Mike Ashes 问答环节中读到,在 Snow Leopard 中,NSOperationQueue 充分利用了 GCD 和他的崩溃者在 Leopard 中发现的问题现已修复。

手动线程管理

但是,当涉及到管理特定的后台线程时,有没有办法利用 Snow Leopard 中更易于使用的线程管理功能而不破坏 Leopard 中的东西?还是人们会建议我为每个操作系统设置不同的目标,每个操作系统都有不同的类?这对我来说似乎是一场等待发生的维护噩梦。

或者,也许我应该忍受没有针对 Snow Leopard 完全优化我的应用程序并坚持使用+(void)detachNewThreadSelector:toTarget:withObject:或类似的东西。

人们怎么想?

0 投票
3 回答
3678 浏览

multithreading - 如何使用 Grand Central Dispatch 并行化数独求解器?

作为一个编程练习,我刚刚完成了一个使用回溯算法的数独求解器(参见Wikipedia中的一个用 C 编写的简单示例)。

为了更进一步,我想使用 Snow Leopard 的 GCD 来并行化它,这样它就可以在我机器的所有内核上运行。有人可以给我一些关于我应该如何去做以及我应该做哪些代码更改的指示吗?谢谢!

马特