タグ

並列処理に関するOgachaのブックマーク (25)

  • .NETで非同期ライブラリを正しく実装する

    アプリケーション開発者はシグネチャを見て、このルールに従っていると仮定します。例えば、ライブラリに同期メソッドがあれば、利用者側はスレッドプールを使って安全に並列化できると仮定できます。しかし、非同期であれば、スレッドを新しく生成するのは無駄で、シングルスレッドのループの中で非同期メソッドを実行するほうがいいと判断するでしょう。 このように考えると、さらに基的な原則が生まれます。 “ライブラリ内でTask.Runを使わない” スレッド、特にスレッドプールのスレッドはグローバルに共有されているリソースで、アプリケーション開発者に属しています。ライブラリの作者はTask.Runを使ったり、スレッドを作るメソッドを作成するべきではありません。どのようなタイミングでスレッドを追加するか決めるのはアプリケーション開発者の権利と責任です。 次のコードは典型的なアンチパターンです。 public st

    .NETで非同期ライブラリを正しく実装する
    Ogacha
    Ogacha 2013/09/11
    スレッドは利用側で制御すべきもので、ライブラリー側でスレッドを制御すべきでないという原則論
  • Async/Await - 非同期プログラミングのベスト プラクティス

    async void を避ける 使用できる戻り値の型には、Task、Task<T>、および void の 3 つがありますが、async メソッドで自然な戻り値の型は Task と Task<T> だけです。同期コードから非同期コードに変換する際、型 T を返すメソッドはすべて Task<T> を返す async メソッドになり、void を返すメソッドはすべて Task を返す async メソッドになります。次のコード スニペットは、void を返す同期メソッドとそれに相当する非同期メソッドを示しています。 void MyMethod() { // Do synchronous work. Thread.Sleep(1000); } async Task MyMethodAsync() { // Do asynchronous work. await Task.Delay(1000);

    Async/Await - 非同期プログラミングのベスト プラクティス
    Ogacha
    Ogacha 2013/04/04
    [async/await] async/await を使用する際の落とし穴について解説。
  • https://atmarkit.itmedia.co.jp/ait/subtop/features/da/ap_masterasync_index.html

    Ogacha
    Ogacha 2013/02/25
    async、await についての連載記事。
  • 継続渡しスタイル(CPS)と非同期構文(async/await) | matarillo.com

    2020-03-31 09:37:20 Eric LippertのBlog “Fabulous Adventures In Coding” に、非同期構文に関する連載記事が投稿されていたので、少しずつ訳してみる。 継続渡しスタイル(Continuation Passing Style)再訪 パート1 パート2: 制御フローは大雑把に パート3: コルーチンは慎重に パート4: 自身をひっくり返す パート5: CPSと非同期 C# 5の非同期 パート1 パート2: awaitはどこから? パート3: 複合 パート4: 魔法じゃない パート5: タスク大杉 パート6: asyncはいずこへ? パート7: 例外 パート8: もっと例外

    Ogacha
    Ogacha 2013/02/25
    Microsoft 社 C# コンパイラー チームの Elic Lippert 氏のブログの翻訳。Inside of のような感じ。
  • C# - C# メモリ モデルの理論と実践 (第 2 部)

    このブラウザーはサポートされなくなりました。 Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。 C# メモリ モデルの理論と実践 (第 2 部) Igor Ostrovsky 今回は、C# メモリ モデルについての 2 回連載の 2 回目です。MSDN Magazine の 12 月号の第 1 回 (msdn.microsoft.com/magazine/jj863136) で説明したように、コンパイラとハードウェアはプログラムのメモリ命令をわずかに変化させることがあり、その方法によってはシングルスレッドの動作に影響しなくても、マルチスレッドの動作に影響することがあります。たとえば、次のメソッドを考えてみます。 void Init() { _data = 42; _initialized = true;

    C# - C# メモリ モデルの理論と実践 (第 2 部)
    Ogacha
    Ogacha 2013/02/20
    .NET Framework 4.5 の CLR JIT が x86-x64、Itanium、ARM などをどう処理しているかを解説。下巻。
  • C# - C# メモリ モデルの理論と実践

    C# メモリ モデルの理論と実践 Igor Ostrovsky 今回は、C# メモリ モデルについて 2 回にわたってお伝えする連載の第 1 回です。今回は、C# メモリ モデルが保証することについて説明し、この保証を推進するコード パターンを紹介します。次回は、この保証が Microsoft .NET Framework 4.5 のさまざまなハードウェア アーキテクチャでどのように実現されるかを詳しく説明します。 コンパイラとハードウェアは、プログラムのメモリ命令をわずかに変化させることがあり、その方法によってはシングルスレッドの動作に影響しなくても、マルチスレッドの動作に影響することがあるため、これがマルチスレッド プログラミングを複雑にする要因の 1 つになることがあります。次のメソッドを考えてみます。 void Init() { _data = 42; _initialized =

    C# - C# メモリ モデルの理論と実践
    Ogacha
    Ogacha 2013/02/20
    マルチスレッドと C# における volatile などの解説。上巻。
  • [.NET Framework 4/4.5][C# 5] 非同期で動くビジネスロジックを作る - biac の それさえもおそらくは幸せな日々@nifty

    C# Advent Calendar 2011 参加記事 「Win8 に備えて async / await を勉強してみよう」 で書いたように、 async / await が使えれば非同期処理のコーディングがあっさり出来てしまいます。 たとえば今まで 3秒も掛かっていた UI のイベントハンドラーに async / await を付けるだけで、 ほぼ 0秒で応答が返ってくるようになります (画面が書き換わるのは、 やっぱり 3秒後ですけど)。 ※ ユニットテストのコードでイベントハンドラーの雰囲気を出してみた。 ※ 「LongTimeMethodTest_既存のUIのイベントハンドラーの例だと思ってほしい」は、実行に 3秒。 ※ 「LongTimeMethodAsyncTest_UIのイベントハンドラーはこんな感じになる」の方は、0mS (1ミリ秒掛かっていない)。 こういう嬉しいことが

    [.NET Framework 4/4.5][C# 5] 非同期で動くビジネスロジックを作る - biac の それさえもおそらくは幸せな日々@nifty
  • [C# Advent Calendar 2011] Win8 に備えて async / await を勉強してみよう - biac の それさえもおそらくは幸せな日々@nifty

    これは、 C# Advent Calendar 2011 の 12月 6日の記事です。 この記事では、 C# の新機能である async / await を解説します。 ■ Windows 8 の Metro スタイル この画像は、 Windows 8 Developer Preview のスタート画面。 Windows Phone 7 から導入されたこの Metro スタイルが、 Windows 8 の標準になります。 おそらく多くの一般ユーザーは、 このスタート画面からアプリを使うようになり、 デスクトップを見ることは無くなることでしょう。 スタート画面のアイコンをクリックすると、 そのアプリが全画面で起動します。 Windows キー [ミ田] (Windows Phone では同じ記号のボタン) を押すと、 再びスタート画面に戻ります。 Metro スタイルのアプリケーションの U

    [C# Advent Calendar 2011] Win8 に備えて async / await を勉強してみよう - biac の それさえもおそらくは幸せな日々@nifty
    Ogacha
    Ogacha 2011/12/31
    async / await の動きと使い方解説
  • 非同期タスク - タスクを使って非同期プログラミングを簡単に

    歴史的に見ると、IAsyncResult パターンは、非同期 API を実装する高パフォーマンスのアプローチとして .NET Framework 1.0 で導入されました。ところが、UI スレッドを操作する場合は別の作業が必要になるうえに、適切に実装しにくく、使用するのが困難でした。イベントベースのパターンは、IAsyncResult によって対処されていなかった UI の側面を容易にするため .NET Framework 2.0 で導入され、UI アプリケーションが 1 つの非同期アプリケーションを起動してそれを操作するというシナリオを中心に使用されています。 タスク パターン .NET Framework 4 では、非同期操作を表す方法として、新しい型、System.Threading.Tasks.Task が導入されました。タスクでは、次のように、CPU で実行される通常のコンピュー

    非同期タスク - タスクを使って非同期プログラミングを簡単に
  • 第3回 TaskクラスとPLINQ(Parallel LINQ)(1/3) - @IT

    天は自らタスクるものをタスク 「語る者」と「書く者」の間には温度差がある。コーディングに関していえば、実際にコードを書いて感じる重要度と、声高に語る者たちがアピールする点はしばしば異なっている。 ここはとても大切だから強調しておこう。語られる重要機能と、実際に書いて(使って)有り難みを感じる機能はしばしばい違う。だから、「語りやすい機能」「語ってアピールしやすい機能」「語って説得力を持たせやすい機能」は、意外と「語る者」の支持を得やすく、ネットに情報が氾濫しやすい。 しかし、そうやって情報が氾濫した機能が常に「書く者」にとっても素晴らしいかといえば、必ずしもそうではない。書く者にとって重要なのは、意外と泥臭い機能であったりする。書く者が欲しい機能とはズレがある素晴らしい機能(結局は使い物にならない)が用意されることよりも、欲しい機能を自分で書くための基機能が整備されていくことに価値を見

  • 業界最大級のライブチャットDXLIVE

    PC/AndroidGoogle Chrome (グーグルクローム)、Edge(エッジ)の最新バージョン127にて、ビデオ通話がご利用いただけない不具合が起こっておりましたが、修正をリリースいたしました。ご利用されている皆様には大変ご迷惑おかけいたしましたことをお詫び致します。 現在、PC/AndroidGoogle Chrome (グーグルクローム)の最新バージョン127にて、ビデオ通話がご利用いただけない不具合が確認されており、調査中となっております。ご利用の皆様にはご迷惑をおかけ致しますが、ご理解ならびにご協力の程、何卒宜しくお願い申し上げます。 9月14日(水)午前5時~5時30分(日時間)に、サイトのメンテナンスを行ないます。その間は、一時的にチャットが中断される場合がございます。メンテナンス期間は、作業状況により多少前後することもございます。ご利用の皆様にはご迷惑をおかけ

    業界最大級のライブチャットDXLIVE
  • F#かわいいよF#。F#の並列処理や非同期計算の理解を深めるために、FSharpAsyncとFSharpAsyncBuilderのラッパーをC#で書いてみた。 - Bug Catharsis

    ご存知、F#は並列処理や非同期処理について考慮されて設計された強力な言語です。 いくつかサンプルプログラムを書いて、わたしもその雰囲気については過去に簡単に確認していました。 しかし、FSharpAsyncやFSharpAsyncBuilder(computation expression)にどのような機能が提供されているのか、その多くは把握していませんでした。 C#でFSharpAsyncやFSharpAsyncBuilderのラッパーを書くことで、その理解を深められそうな気がしたので、 試しにちょっと書いてみました。F#のコードとのちょっとした比較もあります。 先に結論から言うと、F#かわいいよF#ということになります。もちろんC#もかわいいです。 FSharpAsyncWrapperを利用した非同期計算サンプルまずは、今回作ったFSharpAsyncWrapperとFSharpAsy

    F#かわいいよF#。F#の並列処理や非同期計算の理解を深めるために、FSharpAsyncとFSharpAsyncBuilderのラッパーをC#で書いてみた。 - Bug Catharsis
  • データを非同期的に同期する方法 (プログラム)

    このブラウザーはサポートされなくなりました。 Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。 このトピックでは、SqlCeReplication クラスを使用して、非同期的にサブスクリプションを同期する方法について学習します。非同期方式によるデータ同期では、同期処理中に、アプリケーションで他の操作を実行できます。SqlServerCe 名前空間の使用については、SqlServerCe 名前空間のリファレンス ドキュメントを参照してください。 非同期方式によるデータ同期を開始するには SqlCeReplication オブジェクトを初期化します。メソッドの外部でオブジェクトを宣言し、このオブジェクトにアクセスできるようにする必要があります。 private SqlCeReplication repl;

    データを非同期的に同期する方法 (プログラム)
  • 非同期方式によるデータ同期

    非同期方式によるデータ同期を使用すると、SQL Server 2005 Compact Edition (SQL Server Compact Edition) アプリケーションではデータ同期が完了するのを待機する間も他の情報の処理を続けることができます。 たとえば、アプリケーションが定期的にデータの同期を実行し、処理速度の遅い接続で大量のデータを送信するとします。この場合、データの同期中、アプリケーションはユーザーの入力に応答しません。ユーザーはアプリケーションが正常に動作していないと考えるかもしれません。データの同期中にアプリケーションをより利用しやすくするために、スマート デバイス上に同期の状態を示す進行状況バーを表示することをお勧めします。非同期方式によるデータ同期を使用すると、データ同期を開始し、同期イベントが発生したときにそのイベントをトラップできます。その後、アプリケーション

    非同期方式によるデータ同期
  • 【C#】C#と諸々 Windowsアプリケーションにおけるマルチスレッドの注意点

    C#がメインで他もまぁ諸々なブログです おかしなこと書いてたら指摘してくれると嬉しいです(´・∀・`) つーかコメント欲しい(´・ω・`) 通常、Windowsアプリでは、イベントハンドラ内で重い処理を行う際は、フォームの一時的なハングを防ぐために重い処理を別スレッドで行う。 その時気をつけなければならないのが、コントロールの操作。コントロールは、コントロール (  の基になるウィンドウハンドル ) を所有しているスレッドで操作しなければならない。別スレッド内でそのままコントロールを操作してしまうと、正常に動作してくれない。 ( .NET 2.0から特に。 ) では、別スレッドで重い処理を行ったあと、どうやってコントロールを所有しているスレッドに処理を行わせるか?それには、Control.Invokeメソッドを使用する。Control.Invokeは、引数で受け取ったデリゲートオブジェクト

  • いげ太のブログ: [C#] 常駐アプリ+マルチ スレッドは要注意

    常駐アプリを実装する たとえば、ウイルス対策やコマンド ランチャなど、代表的なソフトに見るように、常駐アプリとは、およそ以下のような特徴を持つのが一般的だ。 起動時はフォームを非表示 タスク トレイにアイコンを表示 タスク トレイ アイコンにコンテキスト メニューを持つ コンテキスト メニューからは各種設定フォームなどが表示される 上記 1. の実装にはちょっとした Tips が必要になる。いくつかやりようがあるが、もっとも簡便そうに見えるのがこれ。フォームあるいはコンポーネントを継承したクラスを作成し、Main メソッド上でそれをインスタンス化、しかしメイン フォームにはなにも設定しない、というやり方だ。 static void Main() { Component1 compo1 = new Component1(); // Form1 form1 = new Form1(); App

  • http://gosakai.spaces.live.com/blog/cns!9E010DD2504E7E5A!581.entry

  • タスク並列ライブラリ (TPL) - .NET

    タスク並列ライブラリ (TPL: Task Parallel Library) は、System.Threading 名前空間および System.Threading.Tasks 名前空間におけるパブリック型と API のセットです。 TPL の目的は、アプリケーションに並列処理とコンカレンシーを追加するプロセスを簡略化して、開発者の生産性を高めることです。 TPL は、使用可能なすべてのプロセッサを最も効率的に使用するように、コンカレンシーの程度を動的に拡大します。 さらに TPL は、作業のパーティション分割、ThreadPool 上のスレッドのスケジュール、キャンセルのサポート、状態管理、および他の低水準の詳細を処理します。 TPL を使用すると、コードのパフォーマンスが大幅に向上し、目的を達成するためのプログラミング作業に集中できます。 .NET Framework 4 では、マル

    タスク並列ライブラリ (TPL) - .NET
  • 荒井省三のBlog - Site Home - MSDN Blogs

    アナウンス ご無沙汰しております。 ブログですが、Closeになる予定となっております。公開している記事が必要な方は、保存などをお願いします。 Author: shozoa Date: 01/26/2019 デスクトップ ブリッジと VC ランタイムについて Windows 10 Fall Creators Update がリリースされて、Visual Studio 2017 も Fall Creators Update 対応の 15.4... Author: shozoa Date: 11/10/2017 KB4025342 と DAC について 大分、更新が滞っておりました。2017年7月に KB4025342 がリリースされてから、Desktop App Converter... Author: shozoa Date: 09/04/2017 Desktop Bridge と Wi

    荒井省三のBlog - Site Home - MSDN Blogs
  • 同時実行の問題: データ並列パターンと PLINQ

    このブラウザーはサポートされなくなりました。 Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。 データ並列パターンと PLINQ Igor Ostrovsky マルチコア プロセッサは、主流のデスクトップ コンピューターではすっかり一般的になりましたが、マルチコア プロセッサの真価を完全に引き出すアプリケーションを作成することはいまだに困難です。しかし、マルチコアによる並列処理は確かに実現可能であり、よく利用されているアプリケーションの多くが、マルチコア コンピューターではパフォーマンスを向上できるように変更されています。.NET Framework のバージョン 4 では、マルチコア向けのアプリケーション開発を支援するツールとして、コーディネーションと同期の新しいプリミティブとデータ構造のセット、Ta

    同時実行の問題: データ並列パターンと PLINQ