問題タブ [libdispatch]
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.
android - Androidでdispatch_mainなしでメインキューを提供するlibDispatch
Android プラットフォームで libDispatch (GCD) オープンソースを使用しています。そのため、複雑で時間のかかるタスクのほとんどは、NDK (ここでは libDispatch を使用しています) を介して実行されています。
一部の呼び出しでは、dispatch_async(get_main_queue) を使用しています...これが問題の原因です...同時実行キューでタスクを実行できますが、メイン キューでは実行できません。これには、dispatch_main() を呼び出す必要があるため、Java スレッドがその場合にブロックされるため、ここでは実行できません。では、Java UI をセカンダリ スレッドで実行し、dispatch_main() をフックして、ここで dispatch_main_queue を処理することは可能ですか? または: JNI を介して Java メイン UI スレッドから main_queue を提供し続ける必要がありますか?
crash - libdispatch _dispatch_semaphore_wait_slow でのクラッシュ
関数に起因する次のバックトレースで libdispatch の奥深くでクラッシュすることがありSecItemCopyMatching
ます。
このクラッシュは完全にランダムに見えますが、私の同僚には決して起こりません。これは主に 32 ビット iOS シミュレーターで発生しますが、デバイスでも 1 回発生します。
libdispatch のソース コードを調べたところ、クラッシュが次のように発生する可能性があることがわかりました: _dispatch_semaphore_wait_slow()
→ DISPATCH_SEMAPHORE_VERIFY_KR
→ DISPATCH_CRASH
→ _dispatch_hardware_crash()
→__builtin_trap()
しかし、なぜそれが起こっているのかよくわかりません。
誰が何が起こっているのか知っていますか?
編集:次のバックトレースで単体テストを実行すると、同じクラッシュも発生しました:
ios - ローカルの dispatch_once 値が安全でない (一時的なメモリ) と警告がトリガーされる
そのため、暇なときに HTTP リクエストの「エンジン」に取り組んでいます。私が構築しようとしているのは、iPhone アプリの汎用オブジェクトに対する要求/解析応答を生成する「エンジン」です。
そして何よりも、_常に_ UI をコールバックする必要があります。
何が起こったとしても (NSURLRequest のタイムアウト / 解析エラー / NSExcept の発生) (おそらく SIG もいつか ?)
だから私はブロックとdispatch_onceを使って恐ろしいものを作りました。動作しますが、この Clang 警告が表示されます。つまり、リクエストが機能し、例外が発生した場合、UI は明らかに 1 回呼び出されます。
「dispatch_once」への呼び出しは、述語値にローカル変数「once」を使用します。このような一時的なメモリを述語に使用することは潜在的に危険です
これが問題の核心
そこで使用されるいくつかのマクロ:
前もって感謝します:p
memory-leaks - GCD dispatch_async メモリ リーク?
次のコードは最大 410MB のメモリを占有し、再度解放しません。dispatch_sync
(代わりに を使用するバージョンでdispatch_async
は、最大 8MB のメモリが必要です)
メモリ使用量が急増することが予想されますが、再び低下するはずです... リークはどこにありますか?
私は試した:
- ループの前後に @autoreleasepool を追加する
NSRunLoop run
ループへの追加
いくつかの組み合わせを試しましたが、メモリの減少は見られませんでした (数分待っても)。次のステートメントを含む GCD リファレンス ガイドを認識しています。
GCD ディスパッチ キューには独自の自動解放プールがありますが、これらのプールがいつ空になるかは保証されません。
このコードにメモリ リークはありますか? そうでない場合、完成したブロックを解放/排出するようにキューを強制する方法はありますか?
grand-central-dispatch - GCDを使用してプログラムで単一のメインスレッドを取得する
これを参照フレームとして使用すると、次の例が {couldnt} / {wouldnt} の結果、GCD スレッド プールがメイン スレッドで排他的に実行される理由はありますか?
私の理解では、GCD は可能な場合はパフォーマンスを最適化し、(有益な場合は) ブロックを使用可能なスレッドに渡します。ただし、これを xcode で監視すると、これがメイン スレッドで排他的に実行されている可能性があることがわかります。async
2 番目のスレッドが使用されるのは、ディスパッチ呼び出しが行われるまでです。
いつ/なぜ2番目のスレッドが呼び出されるか、呼び出されないかを理解したいだけです。これより前は、2 番目のスレッドが常に呼び出されると想定していました。
c++ - amd64 アーキテクチャの C++ でイメージ バッファを別のバッファの xy オフセットにブリットする最速の方法
x、y オフセットで同じサイズまたはそれ以上のサイズのバッファーにコピーする、任意のサイズのイメージ バッファーがあります。色空間は BGRA です。私の現在のコピー方法は次のとおりです。
高速に実行されますが、それを改善して数ミリ秒余分に得るために何かできることがあるかどうかに興味がありました. アセンブリ コードを使用する場合は避けたいと思いますが、ライブラリを追加するつもりです。
objective-c - dispatch_io_read のキャンセル
GCD 関数を使用して非常に大きな CSV ファイルを解析しています (以下のコードを参照してください)。
エラーが発生した場合は、キャンセルしたいと思いdispatch_io_read
ます。それを行う方法はありますか?