タグ

Threadに関するt_43zのブックマーク (21)

  • Threadの割り込みを活用する - プログラマーの脳みそ

    確実に一定時間スリープする - terazzoの日記ではThreadの割り込みがあっても確実に一定時間の停止を試みているが、そもそもこのようなコードは書いてはいけない。 Thread.sleep()は一定時間止まるための便利メソッドとしてよく知られているが、そのときに発生するInterruptedExceptionについての理解は広まっていない気がする。割り込みとはなんなのか。どういう時に使うのか。 目覚まし時計 お昼休みに昼寝をしようとする。寝過ごすといけないので15分後にアラームを鳴らす設定をした。 さて、ひと眠りするか、というところに友人がやってきた。昼寝はやめて売店に行くことにした。果たして売店でアラームが鳴り始めた。 さて、このとき、アラームは15分間の待機を命じられたわけだけども、お昼寝がキャンセルされたことで、もう待機しなくてよくなってしまった。むしろ、さっさと待機をやめてく

    Threadの割り込みを活用する - プログラマーの脳みそ
    t_43z
    t_43z 2011/12/05
    id:yuripop と一緒に働いてたころにこの辺苦労したなぁ
  • Firefox 3.1のWeb Workersでマルチスレッド・プログラミング - builder by ZDNet Japan

    Web Workersの使用例 ウェブサイトでJavaScriptを使用する場合、通常ならばスクリプトの実行中はページの表示処理が止まってしまうため、あまり長い時間のかかる処理を行うのは好ましくない。その点Web Workersを利用すればバックグラウンドでスクリプトを実行しながら、同時に他の処理を継続するできるため、ユーザに対して素早くレスポンスを返すことが可能となる。 リスト1およびリスト2はWHATWGのドラフトに掲載されたWeb Workersの使用例である。find-primenumber.htmlではworker.jsを指定してWorkerオブジェクト作成し、worker.jsでは素数を計算し続ける。 リスト1 find-primenumber.html - Web Workersの使用例 最大の素数を計算中: リスト2 worker.js - 素数を計算するJavaScrip

    Firefox 3.1のWeb Workersでマルチスレッド・プログラミング - builder by ZDNet Japan
  • http://blogs.sun.com/cinnabar/entry/jruby_on_rails_2_2

  • C++0xのマルチスレッド機能

    はじめに C++の新しい標準規格である「C++0x」の大きな新機能の1つが、マルチスレッド処理のサポートです。 従来のC++では、マルチスレッド機能は標準規格の拡張としてコンパイラごとに提供されていたため、細かな部分がコンパイラやプラットフォームによって異なっていました。しかしC++0xでは、すべてのコンパイラが同じメモリモデルに準拠し、同一のマルチスレッド機能を利用できることになります(ただし、従来同様の拡張をコンパイラが独自に提供することも可能です)。 開発者の立場からすると、マルチスレッドのコードを別のコンパイラやプラットフォームへ移植するときの手間を大きく省くことができます。複数のプラットフォーム向けの開発を行う場合でも、種々雑多なAPIや構文をいくつも頭に入れておく必要がありません。 新しいスレッドライブラリの中心を担うのは、実行スレッドを制御するstd::threadクラスです

    C++0xのマルチスレッド機能
  • Multi-Threaded Debuggerが地味にスゴくて泣ける - marsのメモ

    この前その紹介記事見つけたんで,それを真似しながら実際動かしてみた。きしださんの例がちょうどよかったので,これを題材にしてみたよ。 Runner#run()の適当なところにブレイクポイント仕込んでデバッガを起動する。するとスレッドごとに同じ場所で止まるんで,こんな具合に教えてくれる(この時点ですでにスゴイ)。 適当なスレッド選んでステップ実行とかするわけなんだが,スレッドの一覧が表示されているんで,どんだけスレッドが起きてるとか,どのスレッドが止まってるとか丸分かり。さらにスレッド一覧の右端には,スレッドの停止・再開ボタンが付いているので,興味ないスレッドは先やっててみたいなことができる(スゴイよね)。 さらにダメ押しなのが,ステップ実行中に他のスレッドがどこで停止しているかも見える!!(超スゲぇ) 緑色の矢印&ハイライト行が現スレッドの実行位置で,歯車アイコンが他のスレッドの実行位置(停

    Multi-Threaded Debuggerが地味にスゴくて泣ける - marsのメモ
    t_43z
    t_43z 2008/12/02
    これはすごい。
  • 第35回Rails勉強会@東京で発表をしました - recompile.net

    高井 直人 takai@recompile.net ソフトウェアエンジニア。1977年横浜生まれ。大学在学中からネットワークや情報技術にたずさわる。Web制作会社などを経て、現在はシステムインテグレータに勤務。エンタープライズRubyをテーマに社内標準の策定などに従事している。

  • 2008-11-20 - きしだのはてな: スレッドで投機的実行を実現する方法を考えてみた

    スレッドのロックをする場合、読み込み処理同士は他に影響を与えないのでロックをする必要がない。 Javaでは、ReadWriteLockを使うと、読み込みスレッドは同時にいくつでも動くけど書き込みスレッドは他のスレッドが動いていると処理をまち、書き込み処理中は読み込み処理もできなくなる。 ただ、ReadWriteLockの場合、処理が読み込みなのか書き込みなのかがロック取得時に決まっている必要がある。 なので、あらかじめ読み込み処理か書き込み処理か決めれず、通常は書き込みを行わないけど条件によって書き込むというような場合にはReadWriteLockは使えない。 ということで、書き込みの頻度が少ない場合には、とりあえず処理を行っておいて、書き込みなければそのまま実行、書き込みがあっても他のスレッドによって値が変えられてなければやはりそのまま実行、もし他のスレッドによって書き込みがあれば、処理

  • 2008-11-19 - きしだのはてな: マルチスレッド対応カウンタ

    Javaの++演算子はアトミックじゃない。つまり、++nは、n = n + 1と分解されたとき、nを読み込んだ後、1足した値をnに書き込む前に他のスレッドがnを変更していたら、すでに他のスレッドで行っていた変更が無効になる。 で、これはvolatileをつけてもだめ。 つまり、このプログラムの実行結果が20000にならない。 public class NonAtomicIncrement { static int count; public static void main(String[] args) throws InterruptedException{ Thread t = new Thread(){ @Override public void run(){ for(int i = 0; i < 10000; ++i){ ++count; } } }; t.start(); for

    2008-11-19 - きしだのはてな: マルチスレッド対応カウンタ
    t_43z
    t_43z 2008/11/19
    知らなかった
  • Java 6のスレッド最適化は実際に動作しているのか?

    はじめに - Java 6におけるスレッドの最適化 Sun、 IBM、BEAやその他のJVMベンダーが、それぞれのJava 6仮想マシンが提供するロック管理と同期の最適化に多くの注意を払ってきました。バイアスドロック、ロックの粗粒度化、エスケープ解析によるロックの削除、適応型スピンロックといった機能は、すべてアプリケーションのスレッド間でより効果的なオブジェクト共有を可能にし、並列性をより高めるために設計されたものです。こうした個々の機能は洗練されており、興味深いものですが、疑問があります;当にこうした約束を果たしてくれているのでしょうか?2つのパートからなるこの記事では、私はこうした機能を詳しく調査します。シングルスレッドベンチマークの助けを借りて、パフォーマンスに関する疑問に答える試みをしようと思います。 ロックは悲観的である Java でサポートされているロックの(ほとんどのスレッ

    Java 6のスレッド最適化は実際に動作しているのか?
  • Javaでスレッドを使う際の注意点 | 株式会社シンメトリック公式ブログ - 携帯開発から生まれる技術情報

    Javaでスレッドを使う際の注意点|株式会社シンメトリック公式ブログ - 携帯開発から生まれる技術情報| 携帯サイト開発から生まれる技術情報ブログ どんなプログラム言語でもそうなのですが、マルチスレッド下でプログラムを組むときは、シングルスレッドとは違うところに色々気を使わないといけません。 今回は、Javaマルチスレッドプログラムでは基的なことですが(自分だけかもしれませんが)よく忘れて、不可解な動作に首を傾げてしまうポイントについて説明していきます。 ヒープ領域にあるデータの更新タイミングをちゃんと把握する Javaプログラムからアクセスできるメモリ領域には、大きくわけて、スタック領域(以下スタック)とヒープ領域(以下ヒープ)の2種類が存在します。 スタックは、ローカル変数や、メソッドの引数・戻り値情報を持ち、ヒープは newされたオブジェクトや、ロードされたclass情

  • Java標準同期化オブジェクトの活用で手軽にマルチスレッド対応 | 株式会社シンメトリック公式ブログ - 携帯開発から生まれる技術情報

    Java標準同期化オブジェクトの活用で手軽にマルチスレッド対応|株式会社シンメトリック公式ブログ - 携帯開発から生まれる技術情報| 携帯サイト開発から生まれる技術情報ブログ 前回は、DateFormatクラスがマルチスレッド問題によってバグを引き起こす例を紹介した。マルチスレッドによる問題に対処するには、スレッドごとにインスタンスを作成するか、synchronizedブロックによる同期化を行う。でも「正しい同期化」を行うには十分な知識とコードの把握が不可欠・・・。 そんな時に重宝するのが、Java標準で用意されている同期化オブジェクト。どんなケースにも対応できるわけではないけど、お手軽かつ必要十分な機能を備えている。これを使わない手はない。 第3の同期化方法 前回は同期化の方法として、以下2通りの方法を紹介した。 [方法A]スレッドごとにクラスのインスタンスを生成 [方法B]クラス

  • jconch - Google Code

    Code Archive Skip to content Google About Google Privacy Terms

  • JavaScriptによるマルチスレッドの実現‐Concurrent.Threadの裏側

    function f ( ) { do_something(); do_another(); do_one_more(); } このプログラムでは順番に3つの関数を呼び出していますが、各関数呼び出しの間でいったんスレッドの実行権を他のJavaScriptコードに渡したいとします。これは次のように、各関数呼び出しをそれぞれ別の関数に分けて、間にsetTimeoutを挿むようにプログラムを書き換えることで実現できます。 function f ( ) { do_something(); setTimeout(f1, 1);  // 1ミリ秒後にf1を呼び出す } function f1 ( ) { do_another(); setTimeout(f2, 1); } function f2 ( ) { do_one_more(); } こうして書き換えた関数fを、 f(); f(); のようにし

    JavaScriptによるマルチスレッドの実現‐Concurrent.Threadの裏側
    t_43z
    t_43z 2008/03/14
    これは詳細な解説。
  • Article: JavaScriptへのマルチスレッド・プログラミングの導入

    Spring BootによるAPIバックエンド構築実践ガイド 第2版 何千人もの開発者が、InfoQのミニブック「Practical Guide to Building an API Back End with Spring Boot」から、Spring Bootを使ったREST API構築の基礎を学んだ。このでは、出版時に新しくリリースされたバージョンである Spring Boot 2 を使用している。しかし、Spring Boot3が最近リリースされ、重要な変...

    Article: JavaScriptへのマルチスレッド・プログラミングの導入
  • マルチスレッドのコンテキスト切り替えに伴うコスト - naoyaのはてなダイアリー

    また Linux カーネルの話です。 Linux では fork によるマルチプロセスと、pthread によるマルチスレッドでの並行処理を比較した場合、後者の方がコストが低く高速と言われます。「スレッドはメモリ空間を共有するので、マルチプロセスとは異なりコンテキストスイッチ時にメモリ空間の切り替えを省略できる。切り替えに伴うオーバーヘッドが少ない。」というのが FAQ の答えかと思います。 が「オーバーヘッドが少ない」と一言にいわれても具体的にどういうことなのかがイメージできません。そこで Linux のスレッド周りの実装を見て見ようじゃないか、というのが今回のテーマです。 3分でわかる(?) マルチプロセスとマルチスレッド まずはうんちく。マルチプロセスとマルチスレッドの違いの図。以前に社内で勉強会をしたときに作った資料にちょうど良いのがあったので掲載します。Pthreadsプログラミ

    マルチスレッドのコンテキスト切り替えに伴うコスト - naoyaのはてなダイアリー
  • 【コラム】Java API、使ってますか? (21) Java EE環境でのスレッドプログラミングを可能にするJSR 237 | エンタープライズ | マイコミジャーナル

    JSR 237: Work Manager for Application Servers つい先日、次期Java EEプラットフォーム仕様となるJSR 316がExecutive Committieeによる最初の承認投票を賛成多数で通過した。JSR 316では、Java EE 6で新しく追加されるAPIとしてJSR 196、JSR 236、JSR 237、JSR 299、JSR 311などを挙げている。そのうちJSR 311については連載でも第18回で取り上げた。今回は「JSR 237: Work Manager for Application Servers」を紹介したい。 JSR 237は、ひとことで言ってしまえばJava EE環境でスレッドプログラミングを可能にするためのAPIである。Javaでスレッドプログラミングを行うためには、通常java.lang.Runnableインタフ

  • IBM Developer

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    IBM Developer
  • 「Java SE 6完全攻略」第27回 Swingでマルチスレッド - SwingWorker その1

    この問題は,サン・マイクロシステムズのJavaエバンジェリストグループが主体になって毎月開催しているセミナー「今月の2時間で学ぶJava Hot Topic」で取り上げたのと同じものです。Javaエバンジェリストグループは5分でわかる今週のJavaホットトピックというブログでも,定期的にJavaのパズルを掲載しており,このパズルも掲載されています。 ですので,このセミナーに参加された方はもう答えを知っていはずですね。正解は(2)です。 この結果は「Swingで実装されている」というところがキーです。同じものをAWTで作り直して実行すると,結果は(6)になります(ソースコード)。 なぜSwingだともともとの意図である(6)になってくれないのでしょうか。 それはSwingがシングルスレッドで実装されているからです。 SwingやAWTはイベント駆動で動作することは皆さんご存じのはずです。イベ

    「Java SE 6完全攻略」第27回 Swingでマルチスレッド - SwingWorker その1
  • JDK6はsynchronizedの開放順が変わってる - きしだのHatena

    JDK5では先に入った順にsynchronizedから抜けるのですが、JDK6では後に入った順にsynchoronizedから抜けます。 ということは、synchoronizedに先に入ったスレッドは、いつまでたってもsynchoronizedから抜けれない可能性があるということです。 これって仕様なんでしょうか?

    JDK6はsynchronizedの開放順が変わってる - きしだのHatena
    t_43z
    t_43z 2007/01/18
    JDK6では後に入った順にsynchoronizedから抜けますっとは言い切れないみたいだけど少なくともJDK5までとは挙動が違う模様。他にもJDK6のバグ報告有
  • 自作HTTPサーバーのマルチスレッド化と動作検証:CodeZine

    はじめに 『Javaによる簡易HTTPサーバーの作成』第3回目の今回は、前回までのHTTPサーバーの実装に対してマルチスレッド処理を追加します。記事では、次の項目について取り上げます。スレッドの作成スレッドプールの仕組み 対象読者 記事は、Javaプログラミングの初級者から中級者を対象に、J2SEのスレッドの利用方法を説明します。なお、J2SE 5.0で追加されたコンカレントユーティリティについては記事の対象外とします。必要な環境 記事のソースをビルド/実行するには、J2SE 1.4以上を利用してください。ソースファイルアーカイブは、直接NetBeans 4.1のプロジェクトとして開けるように構成してありますが、NetBeans 4.1を利用しなくても、コマンドラインからJDKおよびAntを利用してビルドすることができます。 なお、ソースファイルアーカイブに格納してあるコンパイル済