問題タブ [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.
language-agnostic - グランド セントラル vs パラレル エクステンション
Apple の今後の "Grand Central" テクノロジ (Snow Leopard で) に関する優れた Web サイトと、Microsoft の Parallel Extensions (およびネイティブの並列コンピューティング機能) との比較を知っている人はいますか?
objective-c - ブロックについて学ぶための推奨リソース
MacOSXとiOSのブロックとGCDについて学ぶためのいくつかの良い推奨リソースは何ですか
macos - OpenMPではなくGrandCentralDispatchを使用する必要があるのはなぜですか?
AppleはSnowLeopardにGrandCentralDispatch(スレッドプール)を導入しましたが、クロスプラットフォームでLeopardでも動作するOpenMPで使用する理由については説明していません。どちらも非常に使いやすく、機能も似ています。それで、何かアイデアはありますか?
macos - グランドセントラルディスパッチ対Cilk++
Grand Central Dispatch(現在Appleによってオープンソース化されています)とCilk ++について何か考えがありますか?比較/対比?CilkはWindows専用ですか?
functional-programming - さまざまなプログラミング言語がクロージャをどのように使用していますか?
私の知る限り、主流の言語の中で、他の人の知識と組み合わせる
- Objective C
- C#
- VB.net
Java- Python
- ルビー
- Javascript
- 舌足らずの発音
- Perl
クロージャと無名関数があります。プレーンC/C++にはどちらもありません。
これらの言語のクロージャは同じセマンティクスを持っていますか?それらは日常のプログラミングにとってどれほど重要ですか?
背景: AppleのGrand CentralDispatchを対象としたObjectiveCの新しい追加について読んでいて、ブロックのような構造を言語に導入する方法が本当に1つしかないのか、それとも異なる方法があるのかを学ぶ必要があると思いました。
cocoa - Cocoa の同時ネットワーク クライアント
私は、本質的に同時ダウンロード マネージャーである Cocoa アプリを構築するための最善の方法を頭の中で考え出そうとしています。アプリが通信するサーバーがあり、ユーザーはプルダウンするものの大きなリストを作成し、アプリはそのリストを処理します。(HTTP や FTP を使用していないため、URL 読み込みシステムを使用できません。ソケット接続を介して話します。)
これは基本的に、古典的な生産者と消費者のパターンです。秘訣は、コンシューマーの数が固定されており、永続的であることです。サーバーは、開くことができる同時接続数 (通常は少なくとも 2 つ) に厳密な制限を設定し、新しい接続を開くにはコストがかかるため、理想的な世界では、同じ N 個の接続がアプリの存続期間にわたって開かれます。
これにアプローチする 1 つの方法は、それぞれが接続を「所有」する N 個のスレッドを作成し、リクエスト キューで待機し、空の場合はブロックすることです。接続数が膨大になることはないため、実際のシステム オーバーヘッドの観点からは、これは不合理ではありません。しかし、概念的には、Cocoa はより洗練されたソリューションを提供する必要があるようです。
を使用して、接続数でNSOperationQueue
呼び出すことができるようです。setMaxConcurrentOperationCount:
次に、ダウンロード リクエストをそのキューに放り込みます。しかし、その場合、接続自体を管理する方法がわかりません。(それらをスタックに置き、キューに依存して、オーバー/アンダーランしないようにしますか?スタックと一緒にディスパッチセマフォを投入しますか?)
Grand Central Dispatchというすばらしい新しい世界にいる今、これに取り組む他の方法はありますか? GCD の主力機能である同時実行性を動的にスケーリングする機能 (および、 Changing Producer-Consumer Implementationsに関する Apple の推奨事項で言及されている) は、実際には役に立たないため、一見したところ、そうは思えません。しかし、私はそれについて読むことの表面をかじっただけです。
編集:
重要な場合: はい、サーバーとの実際の通信を行うために、非同期/ノンブロッキング ソケット API を使用することを計画しています。したがって、I/O 自体は独自のスレッドである必要はありません。私が関心を持っているのは、作業を待ち行列に入れ、(安全に) 接続が利用可能になったときにそれを接続に渡す仕組みだけです。
objective-c - ディスパッチキュー:実行されているかどうかを確認する方法と停止する方法
私はGCDで遊んでいて、おもちゃのCoinFlipperアプリを作成しました。
コインを裏返す方法は次のとおりです。
ご覧のように; フリップの数を大きなチャンクに分割して、バックグラウンドでフリップし、メインキューのプロパティを更新しています。プロパティはウィンドウコントローラーによって監視されており、UIは実行結果で更新されます。
同時実行プログラミングガイドとGCDドキュメントを確認しました。キューを一時停止する方法はありますが、それらを停止して、キューに入れられて実行されていないすべてのオブジェクトを削除する方法はありません。
「停止」ボタンを接続して、開始後に反転をキャンセルできるようにしたいと思います。これにより、プロパティをNSOperationQueue
監視して、実行されているかどうかを確認し、キューに入れられたブロックを削除できます。operationCount
cancelAllOperations
同時実行プログラミングガイドとGCDドキュメントを確認しました。キューを一時停止する方法はありますが、それらを停止して、キューに入れられて実行されていないすべてのオブジェクトを削除する方法はありません。
それで :-
- キューに追加したブロックがまだ待機しているかどうかを確認するにはどうすればよいですか?
- まだ実行されていないブロックをキャンセルするにはどうすればよいですか?
- 私はGCDに慣れていないので、正しくやっていますか?
ios - Grand Central Dispatch は実際にオペレーティング システムをどのように使用していますか?
私は GCD がどのように機能するかについて確かな考えを持っていますが、宣伝されている「オペレーティング システム管理」の内部構造についてもっと知りたいと思っています。Grand Central Dispatch が「オペレーティング システム」とどのように連携するかについての技術的な説明は、ほとんどすべてがまったく異なるようです。私の発見のいくつかを言い換えます。
「これは、多くのコアにタスクを分散する OS にグローバルなデーモンです。」
私はそれを信じるほど愚かではありません。
「カーネルには、すべての GCD アプリケーションを認識するためのサポートが組み込まれています。GCD アプリケーションは、カーネルと連携して動作し、アプリケーション内のスレッドの管理方法について論理的な決定を下します。」
この同期スキームは、アプリケーション内のロジックを管理するよりもはるかに遅くなるようです。
「GCD はアプリケーション内にのみ存在し、現在のシステム負荷をその動作の指標として使用します。」
これは私にはより現実的に聞こえますが、このようなステートメントは 1 か所でしか見ませんでした。
ここで実際に何が起こっているのですか?それは単なるライブラリですか、それとも「システム」全体ですか?
objective-c - SnowLeopardとLeopardの1つのコードベース
バックグラウンド
私はMac用のアプリケーションを構築することに苦しんでいる開発者です。ユキヒョウを手に入れようとしています。今まで私はLeopardをベースに構築してきました。私はCocoaの開発を約1年しか行っていませんが、それほど集中的ではありません。
特にSnowLeopardとGrandCentralDispatchについてたくさん読んだことがあります。ブロックを使用していることは承知していますが、ブロックの仕組みやGrandCentralDispatchの仕組みについては詳しく説明していません。
私の質問
Snow Leopardの新しいマルチスレッド機能を最大限に活用しながら、Snow LeopardとLeopardの両方に対して1つのコードベースを開発するにはどうすればよいですか?
NSOperationQueue
私の本能は、コードでGCDを直接処理することではありませんが、キューに入れる必要がある場合は、NSOperationQueueを使用してください。SnowLeopardのMike Ashes Q&Aセッションから、NSOperationQueueはGCDとクラッシャーを最大限に活用していることがわかりました。 Leopardで発見されたものが修正されました。
手動スレッド管理
ただし、特定のバックグラウンドスレッドの管理に関しては、Leopardの機能を壊すことなく、Snow Leopardの使いやすいスレッド管理機能を利用する方法はありますか?または、OSごとに異なるターゲットを設定し、それぞれに異なるクラスを設定することをお勧めしますか?これは私には、メンテナンスの悪夢のように思えます。
あるいは、アプリがSnow Leopard用に完全に最適化されていない状態で生活し、それに固執する必要があるかもしれません+(void)detachNewThreadSelector:toTarget:withObject:
。
人々はどう思いますか?
multithreading - Grand Central Dispatch を使用して Sudoku ソルバーを並列化するには?
プログラミングの演習として、バックトラッキング アルゴリズムを使用する数独ソルバーを書き終えました ( C で書かれた簡単な例については、ウィキペディアを参照してください)。
これをさらに一歩進めるために、Snow Leopard の GCD を使用してこれを並列化し、マシンのすべてのコアで実行できるようにしたいと考えています。これを行う方法と、どのようなコード変更を行う必要があるかについて、誰かが私に指針を与えることができますか? ありがとう!
マット