タグ

multi threadに関するkyouzontのブックマーク (24)

  • ロブロブラボ - ROBROB LAB

    まず、通信をTCPでやるかUDPでやるか、ということについて。 一般的なコト言うと、TCPは信頼性が高く、UDPはオーバーヘッドが少ないと言われてます。 個人的にはMMOでも大抵の場合TCPでOKだと思います。 MMOの場合ショートパケットを多く送信することになりがちですので、 ヘッダが短いUDPは正直かなりの魅力です。 また、UDPでも再送信機構など作って信頼性を持たせることも可能でしょう。 それでもおいらがTCPを推す理由は、ユーザー側の負担が少ないからです。 TCPですと、ユーザー側の負担がかなり低いと思います。 ファイアーウォールなどであえて遮断しない限り、大抵セッションが確立できます。 UDPの場合は、UDPホール・パンチングが動作すれば、 ユーザーが何も設定しなくともうまく動作するかもしれません。 そうでなかった場合にはUPnPでなんとかして...。 それでもダメなら、ユーザー

  • Break Free of Code Deadlocks in Critical Sections Under Windows

    This browser is no longer supported. Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support. Solving 11 Likely Problems In Your Multithreaded Code Joe Duffy Concurrency is everywhere. Server-side programs have long had to deal with a fundamentally concurrent programming model, and as multicore processors become more commonplace, client-side prog

    Break Free of Code Deadlocks in Critical Sections Under Windows
  • [実装編]スレッドセーフにすることを忘れてはいけない

    スレッドセーフとは,アプリケーションをマルチスレッドで動作させても問題がないことを指す。サーバー向けアプリケーションは,マルチスレッドで動作するように設計・実装することが望ましい。そのほうが通常はパフォーマンスが向上するからだ。 だが,マルチスレッドのアプリケーションは,注意深く設計・実装しないとトラブルが生じる。例えば,あるスレッドで保持していた変数の値がほかのスレッドからアクセスされ,処理結果が上書きされたり,ほかの利用者の情報が見えてしまったりする。 こうしたトラブルは,開発者が1人で単体テストしているときには見つけられず,多数の利用者で限界時の挙動テストをしたときや,番移行した後で,たまたま見つかることが多い。トラブルが発生するタイミングを再現することが難しいので,デバッグは困難になりがちだ。 マルチスレッドでのトラブルを防ぐため,開発者は,スレッドセーフな設計と実装を心がける必

    [実装編]スレッドセーフにすることを忘れてはいけない
  • Javaの道:スレッド(4.スレッドの同期)

    概要 例題として、配列priceに設定された課税前の価格を一つづつ抜き出し変数workAreaに代入し、workAreaに代入された価格に消費税を課税する処理を行います。課税前の価格を抜き出しworkAreaに代入する処理をpricePutメソッドにて、workAreaに代入された価格に課税する処理をpriceGetメソッドにて行います。 この処理を行う上でスレッドの実行順序を制御せずに実行した場合は、スレッドの実行順序はJavaの動作するシステムのスケジュール機能に依存するため、必ずしもpricePutメソッドとpriceGetメソッドが交互に実行されるとは限りません。その場合、実行結果は以下のようになる場合があります。 課税後価格は105.0円です。 課税後価格は210.0円です。 # pricePutで新しい価格が設定される前に 課税後価格は210.0円です。 # priceGetが

    Javaの道:スレッド(4.スレッドの同期)
  • Boost.Asio postとdispatchの違い - Faith and Brave - C++で遊ぼう

    Boost.Asioのio_serviceには、post()とdispatch()というほぼ同じことをする関数が用意されています。 以下のブログでわかりやすく解説されていたので、それを見ていくことにします。 To post or to dispatch? - This Thread まず、io_serviceを複数スレッドで動作させます。 それと、最初にメインスレッドのIDを出力しておきます。 std::cout << boost::this_thread::get_id() << std::endl; asio::io_service io_service; asio::io_service::work work(io_service); boost::thread_group group; const int count = 3; for (int i = 0; i < count;

    Boost.Asio postとdispatchの違い - Faith and Brave - C++で遊ぼう
  • boost.asioの非同期IOのしくみ - ぬうぱんの備忘録

    なにがあった 一個前のエントリで同期通信のブロッキングがウンタラカンタラって言って結局非同期通信することに落ち着いたので、非同期通信がどうなってるのかをメモ 基的な流れとか おおよそ次の3ステップ メインスレッドでio_serviceに送受信バッファとハンドラを登録(post) io_serviceは登録されたハンドラを処理する(dispatch) 送受信が完了すると登録したハンドラが呼び出される 補足すると メインスレッドから仕事を投げて子スレッドで仕事を処理するイメージ。 2はio_service::run()内のメッセージループで行われる。 送信にしても受信にしてもハンドラが呼び出されるまでは送受信が終了していないという事なので、バッファを有効にしておく必要がある。 メッセージループの開始と終了 開始と終了が割と面倒。というのも ハンドラを処理するメッセージループはio_servi

    boost.asioの非同期IOのしくみ - ぬうぱんの備忘録
  • NO!と言えるようになりたい

    foo.m_bar と書くべきところを,foo.bar と書いていたら,foo.m_bar なんじゃないのと指摘してくれた.なんだこれは.たまげたなあ.凄い(確信). こんなかんじで書いていると, class ssl_info { public: ptr_cdpi_ssl m_client; }; void func() { get_ssl_obj(info.client, b1); } このようにエラーを出すのだ. /home/ytakano/program/c/catenaccio_dpi/src/cdpi_mongo.cpp:394:22: error: no member named 'client' in 'my_event_listener::ssl_info'; did you mean 'm_client'? get_ssl_obj(info.client, b1); ^~

    NO!と言えるようになりたい
  • C++, boost::thread : スレッドの生成と実行

    C/C++でスレッドを扱う場合は、プラットフォームによって使用するライブラリが違います。 Windows なら Windows API の thread で、 UNIX や Linux 系ならば pthread ライブラリ等を使用します。プラットフォーム依存するコードは可搬性に難があり、解決策の1つとしてプリコンパイルで依存部分をプラットフォームに合わせたライブラリを選択してコンパイルする方法があります。 boost ライブラリの boost::thread は、上のような処理をラップして共通のインターフェイスとして実装されています。 boost/thread.hppの一部 #if defined(BOOST_THREAD_PLATFORM_WIN32) #include <boost/thread/win32/thread.hpp> #elif defined(BOOST_THREAD_

    C++, boost::thread : スレッドの生成と実行
  • What's New in SQL2016 CTP2 Release - MSDN Blogs

    In Visual Studio 2022 17.10 Preview 2, we’ve introduced some UX updates and usability improvements to the Connection Manager. With these updates we provide a more seamless experience when connecting to remote systems and/or debugging failed connections. Please install the latest Preview to try it out. Read on to learn what the Connection ...

    What's New in SQL2016 CTP2 Release - MSDN Blogs
  • vNext Build fails with error message ‘Cannot find solution’ because it does not exist. - MSDN Blog

    In Visual Studio 2022 17.10 Preview 2, we’ve introduced some UX updates and usability improvements to the Connection Manager. With these updates we provide a more seamless experience when connecting to remote systems and/or debugging failed connections. Please install the latest Preview to try it out. Read on to learn what the Connection ...

    vNext Build fails with error message ‘Cannot find solution’ because it does not exist. - MSDN Blog
    kyouzont
    kyouzont 2013/05/19
    次エントリ(続・スレッドとオブジェクトインスタンス)も要チェック。
  • 取り立ては無いの?

    キャッシングは、お金を借りることですから、返済が遅れた場合にテレビドラマ等で見かける「早く金返せやっ!」という風に怒鳴るような取り立て行為があったら怖いですよね。 しかし、銀行系でのキャッシングや大手カ-ド会社・大手消費者金融なら、このような取り立てはほぼありません。これらの会社は、キャッシングの返済期日が過ぎた場合に、電話やメ-ルで「お支払期日が過ぎておりますので、、」的な事務連絡が入る程度です。 そして、ちゃんと「○月○日までに支払います」と答えれば、その約束が破られるまではほぼ連絡が入りません。 これは、貸金業法という法律で取り立て行為の規制という規定があり、更に、この規定を金融庁のガイドラインという形で具体的に「朝9時から夜の8時までに正当な理由なく取り立ての訪問や電話をしてはならない」・「電話の回数は1日3回まで」・「電話や訪問でも、暴力的な態度や言葉を使用してはならない」等が禁

  • jpn.ph

    This domain may be for sale!

    kyouzont
    kyouzont 2012/12/03
    サブスレッドの生成とスレッド間の同期
  • threading – スレッドによる並列処理を管理する - Python Module of the Week

    ページコンテンツ threading – スレッドによる並列処理を管理する Thread オブジェクト カレントスレッドを決める デーモンと非デーモンスレッド 全てのスレッドを列挙する スレッドをサブクラス化する タイマースレッド スレッド間でシグナルを送る リソースへのアクセスを制御する 再入可能なロック コンテキストマネージャとしてのロック スレッドを同期する リソースへの同時アクセスを制限する スレッド固有のデータ ナビゲーション コンテンツテーブル 前: オプション OS サービス 次: mmap – メモリマップファイル This Page Show Source サンプルプログラム PyMOTW の全てのサンプルプログラムの出力は、 注記されていない限りは Python 2.7.2 で生成されています。 標準ライブラリの初期のバージョンでは利用できない機能も紹介している 可能性

  • Perlでマルチスレッド

    2003年3月15日 (土) - Perl ithreads 休日なので、 Perl 5.8.0のマルチスレッドプログラミングで遊ぶ。 use v5.8.0; use strict; use threads; my $thread1 = threads->new(\&main, "One"); my $thread2 = threads->new(\&main, "Two"); $thread1->join; $thread2->join; print "done.\n"; sub main { my ($name) = @_; for (1..10) { print "I am $name ($_)\n"; threads->yield(); } } 以下が実行例。 I am One (1) I am One (2) I am Two (1) I am One (3) I am Two

  • Perl の iThread 使って負荷試験ツールを書いてみた

    えーっと、最近のお仕事でデータベース関連やってまして、DBMS としての性能試験みたいなのを実施したくて(しなくてはいけなくって・・・)、Perl で作ってみました。 いや、Apache bench とか使ってもいいんですが、httpd のメモリ使用量とかも馬鹿にならないので、Perlithread 使って書いてみることにしました。 →Perlithread 使うとメモリ一杯使うので、結果的に同じだったけど・・・(苦笑 プログラムの構造は、producer & consumer モデルってやつの応用です。具体的にはこんな感じ。 で、負荷スクリプトを走らせている間にデータベースサーバの負荷を vmstat なり、sar なりで計測すればOKです。キューに投入するリクエスト数(producer スレッドの enqueue 数)や処理スレッド数(consumer スレッドの数)を増減

  • Perlのithreads(iスレッド)に関するメモ

    Perlithreadsについて ithreadsに関する日語のサイトがあまりないので、何か適当にメモっておきます。 基 サンプル 留意点(重要な基事項) できるだけ最新のPerlで使おう スレッドのコンテキスト スレッドと値 オブジェクトの共有 オブジェクトは二度(以上)死ぬ Windows上でのdetach 特別なサブルーチンCLONEについて マルチスレッドにおけるrand()の使用 スレッドにおけるシグナル処理 関連情報 モジュール その他 forkによるthreadsのエミュレート cond_timedwait なぜかスレッドの生成に時間がかかる時があるのですが… Thread::Queueについて CLONEサブルーチン マルチスレッドにおける再現性のある乱数列 Thread::TieをWIN32 with activeperlで使う スレッドが生きているかどうかのチェ

  • サーバーマシン1台で同時接続者数1万名を実現するにはどうすればいいのかというノウハウと考え方

    CEDEC 2012ではドラゴンクエストXは「世界は一つ」を実現するためにどのようなサーバ構成にしているのか?ということで、オンライン作品であるドラクエXを支えるサーバの構成が講演されましたが、ゲームサーバー&ネットワークエンジン「ProudNet」の開発者であるNettention社のCEOであるHyunjik Baeさんは、韓国のオンラインゲームのサーバー開発と利用の経験を通して大規模プレイヤーのためのリアルタイムネットワーク同期技術について講演しました。 サーバーマシン1台でMMO同時接続者数10,000名を実現する方法 | CEDEC 2012 | Computer Entertaintment Developers Conference http://cedec.cesa.or.jp/2012/program/AB/C12_I0284.html Hyunjik Bae: こんにち

    サーバーマシン1台で同時接続者数1万名を実現するにはどうすればいいのかというノウハウと考え方
  • 404 Not Found

    kyouzont
    kyouzont 2012/05/04
    volatile変数は常にメモリにアクセスすることから、そうでないものよりパフォーマンスに劣るようである。
  • LockfreeQueueについて - くまメモ

    mutexを使わなくても共有できるデータ構造について。 Compare and Setという不可分な操作を直列化の拠り所として共有するデータ構造です。 コア数が増えて来たときに高い並列性を期待出来るのではないかと思われます。 キモとなるeunque,deque操作のソースコードを貼っておきます。 void enq(const T& v){ Node* const node = new Node(v); while(1){ const Node* const last = mTail; const Node* const next = last->mNext; if(last != mTail){ continue; } // 確保中にデータが書き換わってしまったのでやり直し if(next == NULL){ // 正常な形のバッファだったら if(compare_and_set(&las

    LockfreeQueueについて - くまメモ
    kyouzont
    kyouzont 2012/05/04
    作者が独自に実装したLock free queueの話。
  • Deep Side of Java~Java 言語再入門 第4回 ~ スレッドの使い方

    スレッドって何? そもそもスレッドは、コルーチン(非同期に協同して動作するサブルーチン)を形式化して生まれたものである。UNIXでは往々にして複数のプロセスを生成して、それらを協同させて何かの処理をさせることがあるが、複数のプロセスを作ってしまうと、それらは独自のメモリ空間で動作するので、データ共有に別な仕掛けが必要となって協同作用の幅が狭まってしまう。そこで、「軽量プロセス」、プロセスと同じく独自のスケジューリングを持つが、それでも独自のプロセスとまでは言えないような、あるプロセスに従属した「軽いプロセス」によるプログラミングモデルが開発され、これを一般に「スレッド」を呼ぶ。 なぜこのようにスレッドが重視されているのか、という理由にはこの「スレッド・プログラミング・モデル」が柔軟にコルーチンを実現できることの他に、マルチプロセッサ環境で非常に効率的なパフォーマンスが実現できることがある。

    kyouzont
    kyouzont 2012/04/30
    本文より:それゆえ、Linux の実装では、Java スレッドの本体は仮想メモリ空間を共有するプロセスである、と言うことができるが、他の実装ではその限りではないことは言うまでもない。