タグ

マルチスレッドに関するteracy_junkのブックマーク (15)

  • Javaマルチスレッディングその1(Executorとタスクキュー) - らこらこブログ

    Androidアプリ開発を想定した上で一般に使えるJavaのマルチスレッディングについてのメモ書きです。 全部を解説するにはページが足りないので、タスクキューの実装を例に触れていきます。 (Java SE 6以上) Executor まずはExecutorについての説明を。Java SE 6でスレッドを生成する方法は ・new Thread … Threadインスタンスの直接的な生成 ・Executorインタフェースを実装したクラスのインスタンスを生成し、別スレッドでの処理を依頼する(executeメソッド等) ・SwingWorkerを用いる Swingに関しては今回はAndroid環境を想定しているので除外します。 Threadインスタンスを直接生成するのは古くから用いられてきた方法ですが、単純故に自由度が大きい反面周期実行や遅延実行、スレッドプールなどの実装を全て自分で行わないといけ

    Javaマルチスレッディングその1(Executorとタスクキュー) - らこらこブログ
  • .NET Frameworkにおけるマルチスレッドプログラミングの基本一覧

    CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

    .NET Frameworkにおけるマルチスレッドプログラミングの基本一覧
  • Collections#shuffleさんのスレッドセーフじゃないぜ俺は! - じみこつブログ

    java.util.Collections#shuffle(List) がスレッドセーフじゃなくてハマった話をご紹介します。 ランダムで3つのキーワードを表示させるために 初期値であるキーワードのリスト(事, 睡眠, 仕事, 勉強, 娯楽, …)を アクセスのたびにランダムに並び替えて そのリストを先頭から3つ取り出して表示する といった処理を行っていました。 しかーしアクセスの多い番環境では 何故かそのキーワードリストが ランダムに表示されず(「仕事|仕事|仕事」 ww) そもそもそのバグに気づいたのも結構経ってからだったので なかなか原因がつかめませんでした。 結局原因はCollectionsのshuffleメソッドが スレッドセーフではないということでした。。。 とりあえず以下のテストコードを見てください。 マルチスレッドで動かすためのメインクラス import java.uti

  • [XCODE] Objective-Cで並列処理を簡単に実装する方法 - YoheiM .NET

    今日は、iPhoneアプリでネットワーク処理を行うアプリならきっと有効な、 処理をマルチスレッドで行う方法をブログに書きたいと思います。 ディスパッチキューを用いた実装となります。 利用する技術 大きく2つの技術を利用します。 1つ目がキューという技術で、キューに処理を登録して、キューは登録された処理を順次実行していくような仕組みを 実現します。 2つ目が、ブロックと呼ばれるObjective-Cの実装技術です。いわゆるクロージャー的なもので、処理を 関数とかメソッドではなく、ブロックという塊で定義できます。 それぞれの技術について、以下の資料が参考になるかもしれません。 並列プログラミングガイド(Apple Document) スレッドプログラミング(Apple Document) マルチスレッドの使いどころ 色々な利用用途があると思いますが、 今回はRSSデータをサーバーからダウンロー

    [XCODE] Objective-Cで並列処理を簡単に実装する方法 - YoheiM .NET
  • マルチスレッド実装時の留意点 : Objective-C プログラミング

    Objective-C では、"performSelectorInBackground:withObject:" メソッドや "NSOperation" クラス、NSThread クラス などを使用して、別スレッドで処理を行うことができるようになっています。 ここでは、別スレッドでの処理を記述するにあたっての留意点に触れてみたいと思います。 autolerease スコープ Objective-C では、autolerease メソッドを使用して、オブジェクトを自動的に開放する仕組みが用意されています。 autolerease メソッドを使うと、予め用意されたオートリリースプールによってその変数が管理されて、オートリリースプールのスコープを抜ける時に、その管理下にある変数もリリースされる仕組みになっています。 ただ、立ち上げたばかりのスレッドでは、オートリリースプールは用意されていないよう

  • iPhoneアプリ開発時のメモリ管理で気をつけること(マルチスレッド編) - A Day In The Life

    以前iPhoneアプリ開発時のメモリ管理で気をつけることという記事を書いたのですがマルチスレッド時のメモリ管理に関して全く触れてなかったのでまとめてみました。 NSAutoreleasePool はスレッドごとに作成する 処理を別スレッドで実行する場合、スレッドごとに NSAutoreleasePool が必要になります。NSAutoreleasePool の作成を忘れるとメモリリークします。 以下のように main 関数から Sample クラスのインスタンスを生成してメソッドを呼び出している場合、シングルスレッドの場合とマルチスレッドの場合で NSAutoreleasePool の作成タイミングが異なります。 @interface Sample { } - (void)hoge; - (void)foo; - (void)bar; - (void)baz; @end int main(

    iPhoneアプリ開発時のメモリ管理で気をつけること(マルチスレッド編) - A Day In The Life
  • Implementing Delayed Loading – NIT-Universe

    Deprecated: __autoload() is deprecated, use spl_autoload_register() instead in /var/www/wordpress4/wp-includes/compat.php on line 502 Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; MT_Import has a deprecated constructor in /var/www/wordpress4/wp-content/plugins/movabletype-importer/movabletype-importer.php on line 32 Deprecated: Function

  • 光学薄膜設計ソフトの設計 その14「NSOperation実験」:腰も砕けよ 膝も折れよ:So-net blog

    さて、マルチコアを使い倒すためにはthreadを生成しなければならない。それを簡単にするためのNSOperationのお勉強。このFoundationのクラスは10.5 Leopardから使えるようになった。 Cocoaアプリでマルチコアに対応させるためにはこれまでNSThreadを使っていた。NSThreadはthreadの同期の機能はなく、自分でNSLockなどを使って実装する必要があった。注意深く作法を守らないと、つまらない理由のせいでデッドロックから抜け出せないコードになってしまうなんてことがよくある。 そのthread生成から同期、特に終了処理(子threadが全部終わるまで待つ)というのを肩代わりしてくれるのがNSOperationらしい。 マルチコアを使う用途だけでなく、ある程度時間のかかる処理をマルチスレッド化する場合にも使えるらしいので、以前数値計算のためにNSThrea

  • NSOperationQueue スレッドと処理の関係 - A Day In The Life

    iOS4 になって NSOperationQueue クラスの仕様に追加がありました。以前は並列処理しか出来なかったのですが mainQueue メソッドが追加になり逐次処理も出来るようになりました。変更点も含めて NSOperationQueue の使い方をまとめてみます。 NSOperationQueue クラスの使い方をきちんと理解していると NSOperation クラスの非並列実行モードと並列実行モードの使い方を間違えることも少ないと思います。 NSOperation クラスについては以下の記事で詳しく説明しています。 NSOperation 非並列実行モードと並列実行モードの使い分け NSOperationQueue と NSOperation の関係 NSOperationQueue と NSOperation を使うと、バックグラウンドで何か処理をしたい場合に一連の処理をま

    NSOperationQueue スレッドと処理の関係 - A Day In The Life
  • NSOperation 非並列実行モードと並列実行モードの使い分け - A Day In The Life

    バックグラウンド処理を手軽に実行できる NSOperation クラスですがこのクラスをきちんと理解して使うには NSOperationQueue クラスについて理解する必要があります。 前回の記事で NSOperationQueue の使い方について説明しました。まだお読みでない方はこちらの記事を先に目を通しておくことをお勧めします。 NSOperationQueue スレッドと処理の関係 今回は NSOperation について NSURLConnection を使ったサーバ通信プログラムを例に説明していきます。 NSOperation には2つの実行モードが存在する NSOperation クラスには「非並列実行モード」と「並列実行モード」の2つの実行モードがあります。 非並列実行モードは処理の終了を NSOperationQueue に任せるのに対し、並列実行モードはプログラマが任

    NSOperation 非並列実行モードと並列実行モードの使い分け - A Day In The Life
  • NSOperationによるバックグラウンド処理 - Objective-Audio

    NSOperationってCoreAnimationみたいな派手な機能と違って、あまり解説されていない気がするので、使い方を書いておきます。オーディオのアプリケーションでも、読み込んだオーディオファイルの波形の画像をバックグラウンドで作っておいて、出来上がったら表示するみたいな事にも使えると思いますので。(※2008/5/12 記事にNSInvocationOperation等いろいろ修正を加えています。GCなしにも対応のはず。) NSOperationを使う NSOperationのサブクラスのmainメソッドにバックグラウンドで行いたい処理を記述しておき、そのインスタンス(以後、オペレーション)を作成して、NSOperationQueueのインスタンス(以後、キュー)のaddOperationメソッドに渡すと、あとは勝手にバックグラウンドで処理してくれます。キューへ渡した後にオペレーシ

  • throw Life - AndroidのHandlerとは何か?

    AndroidでWeb APIを使う場合、マルチスレッドによるユーザビリティ向上を以前のエントリで説明しました。 AndroidアプリのUIはシングル・スレッド モデルです。 単純にマルチスレッドにしてUIの操作をしてしまうと、CalledFromWrongThreadExceptionでアプリがダウンしてしまいます。 これを回避する仕組みがHandlerです。 Handlerの仕組みを簡単に説明しようと思ったのですが、 またもや長くなってしまったので、先にまとめます。 AndroidUI操作はシングル・スレッド モデル ユーザビリティ向上の為にはマルチスレッドが必要 Handlerで実現 Handlerを使わない場合に起きる例外は実行スレッドのチェックで発生 Handlerを使うと、UI Threadの持つキューにジョブを登録できる キューはUI Threadにより実行される

  • Androidで学ぶ並列処理とGUI - やさしいデスマーチ

    Docomo製Android端末の発売日が発表されました。来月の札幌JavaコミュニティもAndroidイベントということもあり、チュートリアルを作成したりしています。ちょっとスレッド周りではまった事もあり、簡単な時計アプリケーションの作り方から、Androidのスレッド描画モデルを紹介します。 とりあえずソース このアプリケーションは、0.5秒毎に日時を更新する単純な時計アプリケーションです。 package com.example.android; // import 略 public class Clock extends Activity { private ScheduledExecutorService service; private Handler handler = new Handler(); /** Called when the activity is first

    Androidで学ぶ並列処理とGUI - やさしいデスマーチ
  • VC++「マルチスレッドの使用法」メモ(Hishidama's VC++Memo "MultiThread")

    マルチスレッドとは、スレッドを複数同時に動かすことです。普通のアプリケーションは 基的に1つのスレッドで動いています。 マルチスレッドと聞くと難しそうですが、MFCでは意外と簡単に出来ます。 ちなみに、「Windowsが擬似マルチスレッドだ~」というような議論は、ここではしません。 よく分からないしぃ。 典型的なマルチスレッドの使い方としては、 画面表示やユーザーからの入力を行うインターフェーススレッドと、 計算をごりごり行うワーカースレッドの2つのスレッドに分けるものがあります。 例えば、ワーカースレッドで計算を行い、その計算の進み具合を インターフェーススレッドのプログレスバーで表示するというものです。 ここでは、「バージョン情報」のダイアログにプログレスバーを付け、 ワーカースレッドで値を1ずつ増加させる処理を行い、 プログレスバーにその状況を表示させるサンプルを示します。 まずは

  • ワーカースレッドの作成方法

    「スレッド」、それは「処理単位」のことです。 実行されるアプリケーションひとつひとつを「プロセス」と呼びます。プロセスは最初にスレッドをひとつ持ちます。ウィンドウをいくつも作り、ウィンドウプロシージャが複数あっても、スレッドが同じならメッセージはひとつひとつ処理されます。 この問題はユーザーインターフェイスを著しく損ないます。例えばウィンドウのデバイスコンテキストに複雑な描画をするとします。描画に時間が掛かるため、ツールボックスに「停止」ボタンを作製しました。さて、いざ描画をシングルスレッド、つまりごく普通に処理した場合、最悪、描画中にはこのボタンを押すことすら不可能になります。 この問題を解決する方法が、マルチスレッドです。新たにスレッドを作製し、そのスレッドの中でメモリデバイスコンテキストへの描画をさせ、最後にウィンドウデバイスコンテキストへとコピーしてスレッドを終了させる、という方法

  • 1