並び順

ブックマーク数

期間指定

  • から
  • まで

41 - 80 件 / 241件

新着順 人気順

並列処理の検索結果41 - 80 件 / 241件

  • GoogleがBigQueryを安価に提供できる理由は、Borgによる大規模分散コンテナ環境があるから

    GoogleがBigQueryを安価に提供できる理由は、Borgによる大規模分散コンテナ環境があるから いまから6年前の2014年、当時ようやくDockerコンテナが世の中に知られるようになってきた頃、Googleはすでに社内のすべてのソフトウェアをコンテナ化しており、毎週20億個ものコンテナをクラウド上で起動していると発表し、多くのエンジニアを驚かせました。 この大規模なコンテナの制御、すなわちオーケストレーションを行っていたのが同社内で「Borg」と呼ばれるソフトウェアです。 そしてKubernetesはこのBorgを基に、Googleがオープンソース化したコンテナオーケストレーションソフトウェアだとされています。 Borgの大規模分散コンテナ基盤でBigQueryが成立する このBorgによる大規模分散コンテナ基盤があるからこそ、BigQueryが安価に提供できるのだと、Google

      GoogleがBigQueryを安価に提供できる理由は、Borgによる大規模分散コンテナ環境があるから
    • Ruby 3.0 の Ractor を自慢したい - クックパッド開発者ブログ

      Ruby の開発をしている技術部の笹田です。娘が自転車に乗り始め、まだ不安なためずっとついていなければならず、少し追っかけまわしただけで息切れがヤバい感じになっています。運動しないと。 ここ数年、Ruby で並列処理を気軽に書くための仕組みである Ractor を Ruby 3.0 で導入するという仕事を、クックパッドでの主務として行ってきました(クックパッドから、これ、と言われていたわけではなく、Ruby を前進させるというミッションの上で行ってきました)。 Ractor は、もともと Guild という名前で開発をはじめ、2020年の春頃、Ractor という名前に変更することにしました。いくつかの機会で発表しています。下記は、RubyKaigi での発表の記録です。 A proposal of new concurrency model for Ruby 3 - RubyKaigi

        Ruby 3.0 の Ractor を自慢したい - クックパッド開発者ブログ
      • 言語のスレッド実装の雑な話(Green threadからGoのgoroutineまで)

        Twitterで "green thread" という単語をたまたま見かけたので、知っていることをつぶやいたよ。 Green thread 言語のスレッドとOSのスレッドの関係 N:1 mapping 言語のスレッドの全てがひとつのOSのスレッドの上で実行されるもの。その代表が上記のJavaのgreen thread。 OSのシステムコールを呼ぶときには必ずnonblockingモードを使い、EAGAIN または EWOULDBLOCKが返ってきたときには他のスレッドの実行権に譲るようにする必要がある。うっかりシステムコールでブロックされてしまうと、全部のスレッドが巻き添えになって動けなくなる。 スレッドの生成やコンテキストの切り替えは軽い。しかし、マルチコアを生かすことができないため、シングルコアの環境でのみ使用される。 1:1 mapping OSのスレッドと言語のスレッドが1対1対応

          言語のスレッド実装の雑な話(Green threadからGoのgoroutineまで)
        • GoのテストをCIで簡単に並列実行する | おそらくはそれさえも平凡な日々

          https://github.com/Songmu/gotesplit gotesplitというかなり便利なツールを書いた。Goのテストをいい感じのサブセットに分割して、それを実行するものです。このアプローチで、社内のテストを15分から3分くらいまでに短縮しました。 これを使えばCI環境での高速なテストの並列実行を簡単に実現できます。 実例 CircleCIやGitHub Actions上で簡単に導入できます。 CircleCIの場合 parallelism: 5 docker: - image: golang:1.15.3 steps: - checkout - run: command: | curl -sfL raw.githubusercontent.com/Songmu/gotesplit/main/install.sh | sh -s bin/gotesplit ./... -

            GoのテストをCIで簡単に並列実行する | おそらくはそれさえも平凡な日々
          • Ruby に Software Transactional Memory (STM) を入れようと思った話 - クックパッド開発者ブログ

            技術部でRubyインタプリタの開発をしている笹田です。コロナの影響で、リモート勤務などに移行し、新しい生活スタイルを満喫されている方々がたくさんいらっしゃるんじゃないかと思います。ただ、私は以前から自主的に自宅勤務することが多かったので、正直生活がぜんぜん変わっていません。 さて、家で私が何をしているかというと、Ruby 3の準備です。その中でも、数年取り組んできた Ruby で並列処理をするための仕組みである Ractor の開発をしています(以前は Guild というコードネームで呼んでいました)。Ractor という名前は、Ruby の Actor みたいな意味で付けました。Erlang とか Elixir で有名な Actor model というアレです。厳密には、Actor model でよく言われる特性をすべて備えているわけではないのですが、並列で動く Ractor を複数作る

              Ruby に Software Transactional Memory (STM) を入れようと思った話 - クックパッド開発者ブログ
            • Pythonの非同期プログラミングを完全理解 - Qiita

              非同期プログラミング 非同期プログラミングについて、聞いたことのある人は多いと思います。例えば、フロントエンドで使われているJavaScriptはシングルスレッド言語で、メインスレッドをブロッキングさせないため、様々な関数は非同期処理になるよう実装されています。Node.jsもその性質を受け継ぎ、I/Oバウンドタスクに長けています。しかし、Pythonになると、並列・並行処理に対応しているため、ほとんどの人は自身のプロジェクトで非同期プログラミングを利用した経験がないでしょう。もちろん、Tornado、TwistedやGeventなどの非同期フレームワークが有名で使ったことのある人は少なくないですが、変わったエラーにぶつかった時はなかなか解決できないでしょう。 近年のPyConの傾向から見れば分かりますが、非同期プログラミングは間違いなくPythonエコシステムの次のトレンドになります。ま

                Pythonの非同期プログラミングを完全理解 - Qiita
              • 排他制御を行う GitHub Action を作った

                弊社では GitHub のレポジトリ管理に Terraform GitHub provider を使用しています。 いちいち手元で terraform plan や terraform apply を叩くのは面倒なので、 GitHub Actions を利用することを考えました。 tf ファイルと現実のリソースとの不整合を避けるために、 これらのコマンドは排他的に実行する必要があります。 例えば terraform apply を実行している最中に terraform plan を実行することはできません。 ここで問題になってくるのが GitHub Actions のジョブ並列数です。 2020-12-30 現在、GitHub Actions は同時に 20 並列まで実行可能ですが、逆に並列数を制限できないという贅沢な悩みがあります。 一応 Matrix Build の並列数を制限するオプ

                • ペペロンチーノで学ぶ非同期プログラミングによる並行処理 - Qiita

                  非同期プログラミングについて、イメージだけを超速で掴むための記事を書きました。非同期プログラミングが全くわからない人、具体的には、「async await ってなに……?」「for 文で実行していくのと何が違うの……?」レベルの人を想定しています。 非同期プログラングって何? 同期的じゃないプログラミングです。同期的ということは、プログラムが上から下に順々に実行されるということです。つまり、普通のプログラムはだいたい同期的です。言い換えれば、非同期プログラミングは順番が入れ替わる(可能性)のあるプログラムです。なぜそんなことをするかについては後述します。 ペペロンチーノを作りたい あなたはペペロンチーノを作りたいとします。以下のタスクが必要です。 パスタを茹でる(5 分) ニンニクを切る(1 分) ソースを作る(4 分)、ただしニンニクを切っている必要がある 盛り付けをする(0 分)、ただ

                    ペペロンチーノで学ぶ非同期プログラミングによる並行処理 - Qiita
                  • 無理なく始めるGoでのユニットテスト並行化 - カンムテックブログ

                    KanmuでPoolを開発しているhataです。最近、ロボット掃除機を買いました。ロボと猫がじゃれている景色はいいですね。 今回はGoのユニットテストの並行化についての記事です。 TL;DR Goのテストは、並行化することでテスト実行時間の短縮やテスト対象の脆弱性の発見などのメリットがある 基本的にはそのままでも最適化されているが、テストコードにt.parallelを記述することでよりきめ細やかな最適化を施すことができる ただし、一定規模以上のアプリケーションへの導入・運用は大変 テストコードを一気に並行化するtparagenというツールや、並行化忘れを防ぐ静的解析ツールがあり、これらを使うことで無理なくテスト並行化の導入・運用ができる はじめに ユニットテスト並行化とは 本記事では、「並行」「並列」という用語を使用します。本記事におけるこれらの用語を定義します。 並行:複数の処理を独立に

                      無理なく始めるGoでのユニットテスト並行化 - カンムテックブログ
                    • Pythonのthreadingとmultiprocessingを完全理解 - Qiita

                      現代の主なOSと言ったら、Mac OS,UNIX,Linux,Windowsなどがあります。これらのOSは「マルチタスク」機能をサポートしています。 マルチタスクとは?と思うかもしれませんが、例えばブラウザーを立ち上げて、音楽聴きながら、Wordでレポートを書くというシチュエーションでは、少なくとも3つのタスクが同時進行しています。そして、表のタスク以外に、裏ではOS関連の様々なタスクがこっそり動いています。 マルチコアのCPUで、マルチタスクが処理できるのは理解しやすいですが、シングルコアのCPUでもマルチタスクが可能です。OSはそれぞれのタスクを交替に実行しています。例えば、タスク1を0.01秒、タスク2を0.01秒、タスク3を0.01秒、タスク1を0.01秒......繰り返して実行していきます。CPUは速いので、ほぼ同時進行のように感じます。この交替実行のことをしばしば「並行処理(

                        Pythonのthreadingとmultiprocessingを完全理解 - Qiita
                      • PEP 703 - 兼雑記

                        https://peps.python.org/pep-0703/ Python の GIL 外す話。これすごく楽しい読みものでした。参照カウントのところが一番人気だと思うのですが、他のところも色々良い。こういう、「んーこういうことするとこういう問題が起きない?」と思ったら次の章くらいでそれが説明される、みたいな読みものは大変好きです 参照カウント: オブジェクトっていうのは作ったスレッドが解放するというのがほとんどなんだから、その場合はロックをいらなくする、他に渡ったら普通の参照カウントぽくする、という話。 Swift に 2018 年に導入された 話らしい。他のスレッドに渡された後で DECREF すると他スレッド用の参照カウントが負になりうるのだけど、その時に queue に入れるということをして、ややこしいので、なんかこれ無しですむ方法はないのかなぁ……と Immortalize

                          PEP 703 - 兼雑記
                        • OpenCVの新しい顔検出をブラウザでも試してみる

                          この記事はOpenCV Advent Calendar 2021の 23 日目の記事です。 はじめに 3 日目の記事で紹介されているように、OpenCV 4.5.4 では新しく顔検出/顔認識の API が実装されました。この記事ではこの顔検出 API をブラウザから呼んでみることにします。ブラウザから呼び出すにあたって、先にきちんとパフォーマンスを確認して使用する解像度を決めます。更に高速化のために SIMD とマルチスレッドを使った OpenCV の Wasm バイナリを作ります。その後、実用的な環境を想定して React のフロントエンドから呼び出すようにしてみます。ついでに WebRTC で実際に加工した画像が送信できることのデモまで行います。 OpenCV.js での新機能の扱い OpenCV.js で JavaScript から呼び出せる機能はホワイトリスト形式になっており、ビル

                            OpenCVの新しい顔検出をブラウザでも試してみる
                          • メモリの使い方の理解はプログラマのたしなみ…??😰 - Qiita

                            はじめに プログラミング学習を始めて1年経過しました。しかし、今までオブジェクト指向の概念から目を背けてきた結果、現在エンジニアとして苦労しているので、書籍「オブジェクト指向でなぜつくるのか」にて学習中です。 その中で、以下のような章がありました。 「メモリの仕組みの理解はプログラマのたしなみ」 これを見て、自分は今までそんなこと意識していなかったのと強く感じたので、今回はこの書籍で書かれていた、一般的なプログラムの動作環境としての最低限の知識を整理しました。 プログラムが動く仕組みを理解する上で重要な概念 コンパイラ方式とインタプリタ方式 プログラムの基本的な実行方式は大きく分けて2つあります。 コンパイラ方式 コンパイラって何? コンパイラは、プログラム全体を読み込んで、それをコンピュータが理解できる形(機械語)に一度に変換するプログラムです。 どういう時に使うの? コンパイラは、プロ

                              メモリの使い方の理解はプログラマのたしなみ…??😰 - Qiita
                            • 君たちの「並行」の理解は間違ってる

                              TL;DR 並行計算の理解を間違ってる人が多いので正したい 並行計算=同時に実行すること 並列計算≒同等のタスクを並行計算すること もうちょっとちゃんと書いたフォローアップ記事も合わせて、お時間が許すようであればお読みください。 状況 並列と並行 / 多言語からみるマルチコアの活かし方に見られるように並行(concurrent)とは「複数の処理を順番に実行すること」とする誤った記述を、この記事に限らずチラホラ目にします。 大事になことなので繰り返しますが、間違った記述を含んでいるのはこの記事だけに限りません。 そのような誤った記述を見かけるたびに「ああこの人も間違ってるのか」と諦観を抱くだけというのもあまりに非生産的なので、間違ってますよとポインタとして示せるように簡単な読み物にしたものがこの記事です。 事実 計算=computingの分野においては並行=concurrentと並列=par

                                君たちの「並行」の理解は間違ってる
                              • 並行プログラミング入門

                                複数のプログラムを同時に実行する「並行プログラミング」は、処理速度を飛躍的に向上させる手法で、タスク管理、プロセス管理、スレッド管理をはじめ、複雑な仕組みについての幅広い知識とテクニックが必要となります。本書はRustとアセンブリ、そして一部Cを用い、CPUのアトミック命令、グリーンスレッド、アクターモデル、π計算、ソフトウェア・トランザクショナルメモリ、async/awaitなど、並行プログラミングに関する理論的な背景から実装までをカバー。さらに、アセンブリ実装の理解を深めるため、AArch64とx86-64アーキテクチャの説明も付録として収録。一歩一歩、着実に理解できるように、その仕組みから順を追って詳しく説明します。GitHub上で公開されているソースコードを実際に動かしながら、並行プログラミングの知識と理解を深めることができます。 関連ファイル サンプルコード 正誤表 ここで紹介す

                                  並行プログラミング入門
                                • Kubernetes CronJobと仲良くなりたい | メルカリエンジニアリング

                                  この記事は、Merpay Tech Openness Month 2020 の17日目の記事です。 こんにちは。メルペイのSREの駒崎(@komattaka)です。 暑かったり台風だったりと大変な日々が続いていますが、ご自愛ください。 目次 対象読者 得られるもの 説明しないこと はじめに CronJobの仕組 そもそもCronJobとは何か パラメータの解説 CronJobが作成される流れ メルペイでは何に困っていた? suspend: trueにしていたCronJobがfalseにした後もJobを生成しない (GKE特有) NodeがCluster Autoscalerによって停止されると、そのNodeで稼働していたJob(Pod)のEvictをCronJobが正常終了したと誤解しconcurrencyPolicy: Forbid(Replace)なのに並列稼働した ユースケース別に設

                                    Kubernetes CronJobと仲良くなりたい | メルカリエンジニアリング
                                  • たった数行でpandasを高速化する2つのライブラリ(pandarallel/swifter) - フリーランチ食べたい

                                    pandas はデータ解析やデータ加工に非常に便利なPythonライブラリですが、並列化されている処理とされていない処理があり、注意が必要です。例えば pd.Sereis.__add__ のようなAPI(つまり df['a'] + df['b'] のような処理です)は処理が numpy に移譲されているためPythonのGILの影響を受けずに並列化されますが、 padas.DataFrame.apply などのメソッドはPythonのみで実装されているので並列化されません。 処理によってはそこがボトルネックになるケースもあります。今回は「ほぼimportするだけ」で pandas の並列化されていない処理を並列化し高速化できる2つのライブラリを紹介します。同時に2つのライブラリのベンチマークをしてみて性能を確かめました。 pandarallel pandaralell はPythonの m

                                      たった数行でpandasを高速化する2つのライブラリ(pandarallel/swifter) - フリーランチ食べたい
                                    • C言語向けコルーチン非同期 I/O ライブラリ neco を使ってみた。

                                      はじめに C言語でコルーチンを扱う方法は色々ありますが、専用の命令を専用の記述方法で実装しなければならなかったりなど、あまりとっつきやすいものではありませんでした。 今日 X/Twitter のタイムラインで見付けた neco はまさにそんな悩みを解消できる物でした。 neco とは neco はコルーチンを使った非同期 I/O ライブラリです。 コルーチン: 開始、スリープ、一時停止、再開、移譲、および結合。 同期: チャネル、ジェネレータ、ミューテックス、条件変数、および待機グループ。 デッドラインとキャンセルのサポート。 ファイルディスクリプタを使った Posix フレンドリーなインターフェース。 ネットワーク、シグナル、ランダムデータ、ストリーム、およびバッファ付き I/O の追加 API。 公正かつ決定論的なスケジューラを備えた軽量ランタイム。 高速なユーザースペースのコンテキス

                                        C言語向けコルーチン非同期 I/O ライブラリ neco を使ってみた。
                                      • Goとマルチコアスケール実装

                                        マルチコア化の未来予測 半世紀前にSF映画「2001年宇宙の旅」に登場するコンピューターHAL-9000が並列コンピューティングの未来を示しました。マルチコアで構成されたコンピューターの物理コアを取り除いてもすぐにクラッシュせずに性能ダウンして処理が継続するという演出がありました。 当時ですらシングルコアコンピューティングの限界が予想されていて、現状のコンピューティングがマルチコア化しているという未来をしっかり予測できていたことがわかります。 演出はコア数に応じてコンピューティング性能がスケールしていることを表現しています。これはマルチコアスケールするソフトウェア実装の未来を示していたと思います。 シングルコア性能向上の頭打ち 2003年以降あたりはCPUの動作周波数が伸び悩み出したところ。 https://queue.acm.org/detail.cfm?id=2181798 より その

                                          Goとマルチコアスケール実装
                                        • 時間がかかる複数のCLIタスクをRust製ツールのPueueで管理する

                                          rsyncによる大容量ファイルの転送やDBのバックアップ・リストアなど、たびたび非常に時間がかかるタスクをCLIで実行するシーンがあります。 通常そういった場合は末尾に&を付加(セッションが切れても中断されないようにnohupとセットで使うことも多い)してバックグラウンドで動作させるのが一般的かと思います。 ただ、そのまま使うとログや実行時間、リターンコードなどの採取が面倒であり、いささか一覧性に欠けます。 そんな中、そのようなユースケースに適したPueueという管理ツールが登場しました。 Pueueとは Pueueとは、長時間のCLIタスクに特化したOSSの管理ツールです。 最近はstarshipやnushellといったRust製のツールが勢いを増していますが、例によってPueueもRustによって記述されています。 Pueueの特徴としては、次の通りです。 リッチなUI: バックグラウ

                                            時間がかかる複数のCLIタスクをRust製ツールのPueueで管理する
                                          • JDK 21 の開発者向けの新機能 - 赤帽エンジニアブログ

                                            Red Hat のソリューションアーキテクトの瀬戸です。 この記事はRed Hat Developerのブログ記事、What's new for developers in JDK 21 | Red Hat Developer を、許可をうけて翻訳したものです。 Java開発者にとってエキサイティングな情報として、今年 9 月 19 日に JDK 21 がリリースされました。 このリリースには、仮想スレッド(Virtual Thread)、レコードパターン(Record Patterns)、順序付コレクション(Sequenced Collections)など、Javaのエコシステムに利益をもたらす多くの新機能が含まれています。JDK 21 のプレビューには、文字列テンプレート(String Templates)、スコープ付値(Scoped Values)、構造化並列処理(Structure

                                              JDK 21 の開発者向けの新機能 - 赤帽エンジニアブログ
                                            • Google製GNU gold以上の速さを実現 超高速リンカ「mold」を支えるテクニック

                                              Kernel/VM探検隊はカーネルや仮想マシンなどを代表とした、低レイヤーな話題でワイワイ盛り上がるマニアックな勉強会です。rui314氏は、制作中のリンカである「mold」について発表しました。全2回。後半は「mold」速さと、その高速化を実現するテクニックについて話しました。前半はこちら。 リンカが速いと何がうれしいのか 植山類氏(以下、植山):リンカが速くなって何がうれしいのか。普通にうれしいです。プログラムを書いているとうれしいことがわかると思いますが、makeを実行すると、普通は自分が直前に変更したファイルしかビルドしないので、デバッグをしていると1つのファイルを編集してビルドすることになります。 コンパイラは1つだけのファイルをコンパイルするのはそこそこ速いですが、リンカは基本的には実行ファイルを丸ごと作ります。全体の入力を一気に受け取って出力するため、差分コンパイルであっても

                                                Google製GNU gold以上の速さを実現 超高速リンカ「mold」を支えるテクニック
                                              • GitHub Actionsで連続pushした時に止めるアレ

                                                大分時間が経ってしまいましたが、2022/8/31 に開催された stand.fm 主催の TECH STAND #9 GitHub イベントに参加しました。 その際に呟いたやつが今回の記事の内容です 有り難いことに直ぐにフォロー頂きました。 あまり纏まった記事が見当たらなかったので、自分用のメモとしてまとめます。 他のCIにはあったアレ GitHub Actionsを利用する前は、TravisCIやCircleCIを利用していました。 移行してから随分使ってないので、記憶が定かではないのですが という機能が標準であった気がします。 この機能の名前は何と呼ぶのでしょうか?地味だけれども、ないと困るアレですw GitHub Actionsのリリース直後にこちらの機能と [ci skip] が使えずに後発なサービスなのにーと不満を覚えていました。 その後にアレの機能を実装したカスタムアクション

                                                  GitHub Actionsで連続pushした時に止めるアレ
                                                • Concurrency in modern programming languages: Rust vs Go vs Java vs Node.js vs Deno vs .NET 6

                                                  This is part of my "Concurrency in Modern Programming Languages" series Concurrency in modern programming languages: IntroductionConcurrency in modern programming languages: RustConcurrency in modern programming languages: GolangConcurrency in modern programming languages: JavaScript on NodeJSConcurrency in modern programming languages: TypeScript on DenoConcurrency in modern programming languages

                                                    Concurrency in modern programming languages: Rust vs Go vs Java vs Node.js vs Deno vs .NET 6
                                                  • Rustのasync/awaitとスケジューラの話 / rust-async-await

                                                    Effectで作る堅牢でスケーラブルなAPIゲートウェイ / Robust and Scalable API Gateway Built on Effect

                                                      Rustのasync/awaitとスケジューラの話 / rust-async-await
                                                    • Python multiprocessing vs threading vs asyncio - JX通信社エンジニアブログ

                                                      エンジニアの鈴木(泰)です。 今回は、multiprocessingとthreadingとasyncioの違いとはなんだろう?という問に挑戦してみたいと思います。 この問の答えをグーグル先生に聞いてみると、非常にたくさんの情報がヒットします。しかしながら、どの情報も断片的なものばかりで(本記事もそうなのかもしれません)、色々と本を読んだりネットを漁ったりして、情報を補完しなければなりませんでした。 本記事は、僕が調べた限りの情報を集約し、この問に対する結論を1つの記事にまとめたものとなっています。 前提 マルチプロセスとは マルチスレッドとは Pythonにおけるマルチスレッド 本題 マルチプロセス(multiprocessingライブラリ)を利用したほうが良い場合 cpu_sec.py cpu_multiprocessing.py cpu_threading.py cpu_asyncio

                                                        Python multiprocessing vs threading vs asyncio - JX通信社エンジニアブログ
                                                      • [Cloud OnAir] Cloud Run Deep Dive ~ GCP で実践するモダンなサーバーレス アプリケーション開発 ~ 2019年9月12日 放送

                                                        [Cloud OnAir] Cloud Run Deep Dive ~ GCP で実践するモダンなサーバーレス アプリケーション開発 ~ 2019年9月12日 放送

                                                          [Cloud OnAir] Cloud Run Deep Dive ~ GCP で実践するモダンなサーバーレス アプリケーション開発 ~ 2019年9月12日 放送
                                                        • 過去のブーム(並列プログラム)の現状を考える

                                                          みんな割と未来の予言はよくするが、あんまりその結果を振り返らんよなぁ。 現在のディープラーニングのブームをどう捉えるか、というか、 プログラマのキャリアという点でどう接していくか、を考えるにあたり、 過去のブームを考えてみるのは良いんじゃないか、という気がした。 最近並列GCや並行GCの章を読んでいて、 一昔前の大きなブームとしてはParallel computingがあったなぁ、と思い出した。 ということでこの事について、専門にしてなかった部外者プログラマの目にどう映ったかを記しておきたい。 なお、「XXXだと言われていた」はあんまりソースとかを確認したりはしてません。 なんとなく自分はそう聞いていた気がしたしそう思ってた、程度のものです。 かつて思っていたことと当時の状況 Parallel computingはだいたい10年くらい前の時点ではその後の大きなトレンドとして明らかに存在して

                                                          • Pythonの非同期処理の基礎とOpenAI APIへ並列リクエストする実践例

                                                            こんにちは、commmuneでデータサイエンティストをしているひぐです。 人間が苦手なマルチタスクをLLMに任せたら、効果的に処理してくれるのではないか?というモチベーションのもと、Pythonの非同期処理を使って並列かつストリーミングでChatGPTの回答を出力するアプリを作りました🤖 例えば下記は、ある課題を入力すると、深さ・広さ・構造・時間軸という異なる観点で解像度を上げてくれるアプリケーションです。 アプリに関する登壇資料↓ このアプリ作成にあたってPythonの非同期処理を勉強したところ、最初は多くの専門用語(コルーチン、イベントループ...)や独自の記法により、全体像をつかむのに苦戦しました。一方で、学んでみると予想以上にシンプルな記法で実装できること、そして応用範囲が広くて便利だと理解しました。 この記事では、そんな少し取っつきにくけど便利なPythonの非同期処理にフォー

                                                              Pythonの非同期処理の基礎とOpenAI APIへ並列リクエストする実践例
                                                            • Rustの std::sync::RwLock はLinuxでwriter starvation問題を起こす (macOSなら平気)

                                                              まとめ: std::sync::RwLock::{write(), try_read()} を併用した場合には「書き込みロックを最優先」という挙動は必ずしも期待できない (LinuxではNG) Pthread の規約が挙動に自由度をもたせており、Linuxにおけるデフォルト実装では writer starvation が発生する Rustにおいて writer starvation を回避しつつ readers-writer lock を使うには parking_lot::RwLock を使うと良い 目次 背景: Readers-writer lock とは? 背景: Rustにおける readers-writer lock 背景: RwLock::write() と RwLock::try_read() 再現コード 原因分析 修正: parking_lot::RwLock を使う おわり

                                                                Rustの std::sync::RwLock はLinuxでwriter starvation問題を起こす (macOSなら平気)
                                                              • WebAssemblyでマルチスレッドによる並列処理を可能にする「wasi-threads」仕様の提案、ByteCode Allianceが明らかに

                                                                WebAssemblyにおける業界標準仕様などを推進する団体「ByteCode Alliance」は、WebAssemblyでマルチスレッドによる高速な並列処理を可能にする「wasi-threads」仕様を提案したことを明らかにしました。 W3Cでのマルチスレッド仕様策定は現在フェーズ3 WebAssemblyは、Webブラウザ上で高速に実行可能なバイナリフォーマットとしてW3CのWebAssembly Working Groupで標準化が行われており、現在でも新たな機能追加や性能向上のための議論が行われています。 現時点でWebAssemlbyはシングルスレッド処理のみ可能ですが、W3Cの仕様策定の作業の中にはマルチスレッドを実現する「threads」の議論が進められており、フェーズ1のFeature Proposal(機能提案)、フェーズ2のProposed Spec Text Ava

                                                                  WebAssemblyでマルチスレッドによる並列処理を可能にする「wasi-threads」仕様の提案、ByteCode Allianceが明らかに
                                                                • 状態機械を合成してデッドロックを検出できる Go 言語パッケージを作ってみました - チェシャ猫の消滅定理

                                                                  はじめに マルチスレッドで動作するプログラムの設計は難しい問題です。個々のスレッドの動作は単純に見えても、複数が並行して動作する場合の動作は組み合わせ論的に複雑になります。また、タイミングに依存する不具合は狙って再現することが難しく、通常の単体テストによる検出にも限界があります。 そんなとき、有効な手法がモデル検査です。システムの取りうる状態をあらかじめ網羅的に探索することで、「実際に動作させた際にごく低い確率で踏むバグ」であっても、動作させることなく設計段階で発見することが可能になります。 ところでちょうど先日、デッドロック発見器を自作するハンズオンに参加する機会がありました。内容は非常にシンプルなモデル検査器を実装するというもので、せっかくなのでそのときの成果物を Go のパッケージとしてまとめたものを以下に公開しました。 github.com 以下、このパッケージで何ができるのかを具

                                                                    状態機械を合成してデッドロックを検出できる Go 言語パッケージを作ってみました - チェシャ猫の消滅定理
                                                                  • Rust Atomics and Locks by Mara Bos

                                                                    About this Book The Rust programming language is extremely well suited for concurrency, and its ecosystem has many libraries that include lots of concurrent data structures, locks, and more. But implementing those structures correctly can be difficult. Even in the most well-used libraries, memory ordering bugs are not uncommon. In this practical book, Mara Bos, team lead of the Rust library team,

                                                                      Rust Atomics and Locks by Mara Bos
                                                                    • Go1.14のcontextは何が変わるのか - Qiita

                                                                      背景 Go1.14 で context パッケージが少し改善されるのは mattn さんの twitter を見て知った方も多いのではないでしょうか。このツイートされた時期と同じくらいにちょうど社内の勉強会で context パッケージをみんなで読んでおり、皆完全に context を理解したので ある程度実装も把握していました。勉強会では GoDoc と最新 master ブランチのコードが結構違うね、みたいな話もありました。ということで、個人的にとても興味深いツイートでした。Go.1.14のリリースノートには記載されていないのがミソです(2020/02/23現在)。 Go 1.4 のリリースノートにまだ含まれてないけど context の WithCancel と WithTimeout の伝搬がこのコミットで速くなってる。https://t.co/gJiT81uVyj — mattn

                                                                        Go1.14のcontextは何が変わるのか - Qiita
                                                                      • Rustで高速に大量のHTTPリクエストを投げる - Qiita

                                                                        自己紹介 趣味でRustをやっている Twitter https://twitter.com/hatookov Github https://github.com/hatoo SoundCloud https://soundcloud.com/gfyxxqjngkze ネットワーク初心者なので誤りがあるかも知れません モチベーション oha HTTPロードジェネレータ Apache Bench(ab)みたいな tui-rsでリアルタイム表示 とにかくいっぱいリクエストを投げたい! ベンチマーク環境 WSL 2 Ryzen 3950x 今回はtokio https://github.com/hatoo/rust_http_benchmarks ベンチマーク雛形 ベンチマーク系のライブラリは複数回実行してしまい、時間がかかるのでやめた ざっくりと時間がわかればいいかな 簡単のためにサーバーはw

                                                                          Rustで高速に大量のHTTPリクエストを投げる - Qiita
                                                                        • Optimize long tasks  |  Articles  |  web.dev

                                                                          Optimize long tasks Stay organized with collections Save and categorize content based on your preferences. Commonly available advice for making your JavaScript apps faster often includes "Don't block the main thread" and "Break up your long tasks." This page breaks down what that advice means, and why optimizing tasks in JavaScript is important. What is a task? A task is any discrete piece of work

                                                                            Optimize long tasks  |  Articles  |  web.dev
                                                                          • 並行・並列プログラミングと同期・排他制御とイミュータブル性の話〜その1「背景: クロック周波数の停滞とコア数の増加」 - Qiita

                                                                            大学の授業で講義資料を作ったので,Qiitaにも展開しておきます. 背景: クロック周波数の停滞とコア数の増加 コンピュータはクロック周波数に同期して計算をします.おおむね1秒間にクロック周波数の数で示されるだけの数の機械語命令を実行できると考えると良いです.たとえばクロック周波数が1GHzであれば,1GHz=1,000MHz=1,000,000(百万)kHz=1,000,000,000(10億)Hzですので,1秒間に1,000,000,000(10億)個の機械語命令を実行できるというような感じです.もちろんこれは概算です. いわゆるヘネパタ本(J. L. Hennessy & D. A. Patterson: Computer Architecture: A Quantitative Approach, 6th edition. Morgan Kaufmann, 2017; 邦訳 中條・

                                                                              並行・並列プログラミングと同期・排他制御とイミュータブル性の話〜その1「背景: クロック周波数の停滞とコア数の増加」 - Qiita
                                                                            • PNG Parser Differential

                                                                              This PNG image renders differently in Apple vs non-Apple decoders: If you're using Apple-flavoured software, you should see "HELLO APPLE", and on all other software, you should see "HELLO WORLD". I found this while writing my own multi-threaded PNG decoder. While pondering my design, I realised that I had an exploitable implementation bug. After learning that Apple has their own implementation of

                                                                              • Choose the Right Python Concurrency API - Super Fast Python

                                                                                How to Choose the Right Python Concurrency API Python standard library offers 3 concurrency APIs. How do you know which API to use in your project? In this tutorial, you will discover a helpful step-by-step procedure and helpful questions to guide you to the most appropriate concurrency API. After reading this guide, you will also know how to choose the right Python concurrency API for current and

                                                                                  Choose the Right Python Concurrency API - Super Fast Python
                                                                                • マルチコアのCPUを使い切って圧縮を速くする - それマグで!

                                                                                  gzip の限界 = CPU 1コア マルチコア・マルチスレッドのCPUがあるのに、gzip や lzma(xz)や bzipといったメジャーな圧縮は、CPUを1コアで処理するんですね。 CPU使用率を見てみたら、CPU利用率は100%を超えないんですね。 HDD・SSDの書き込み速度に限界があるからそれでも良かったんだろうが。いまはメモリが一般的に64GBもある時代です。うちのマシンでもメモリが12GBもあるのに3GB程度の圧縮に、5分とか耐えられません。もうちょっと速くしたい。 cpu利用率が100%で頭打ちになる。gzip gzipを使ってると、CPU利用率が100%で止まるんですよね。lzma などの他の圧縮でも同じ。 gzip/ gunzip をマルチで処理する pigz / unpigz Pigz のマニュアルには次のように書いてある。スレッドを使って並列処理をするっぽい。 P

                                                                                    マルチコアのCPUを使い切って圧縮を速くする - それマグで!