並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 22 件 / 22件

新着順 人気順

multithreadの検索結果1 - 22 件 / 22件

  • シングルスレッドやマルチプロセスなどの並行処理の話について、 すぐに忘れてしまいます。 どうしたらもっと知識が定着すると思いますか? 色んなライブラリーでAPIサーバーを立ててパフォーマンスの差などを見てみたりするのですが、結局よくわかりませんでした。 | mond

    シングルスレッドやマルチプロセスなどの並行処理の話について、 すぐに忘れてしまいます。 どうしたらもっと知識が定着すると思いますか? 色んなライブラリーでAPIサーバーを立ててパフォーマンスの差などを見てみたりするのですが、結局よくわかりませんでした。 フレームワークに頼って実装していると、そのフレームワークが内部でどの様な仕組みで並列または並行処理しているのかが理解できず、ただ使っているだけの状態になり得ます。 フレームワークの設計者からすると、プログラマがそれらを気にしなくても利用できるというのがプロジェクトのゴールでもあるので、それはそれで正しいのですが「並列処理」や「並行処理」を理解したいというモチベーションでは逆にそれが邪魔をしてしまうかもしれません。 並行処理や並列処理を学ぶのであれば、API サーバ等といった物ではなく、コード片で学び始めるのが良いと思います。 例えば Rub

      シングルスレッドやマルチプロセスなどの並行処理の話について、 すぐに忘れてしまいます。 どうしたらもっと知識が定着すると思いますか? 色んなライブラリーでAPIサーバーを立ててパフォーマンスの差などを見てみたりするのですが、結局よくわかりませんでした。 | mond
    • Rubyの並列並行処理のこれまでとこれから - クックパッド開発者ブログ

      技術部の笹田です。今日で退職するので、バタバタと返却などの準備をしています。 本記事では、Rubyの並行並列処理の改善についての私の取り組みについて、おもに RubyKaigi 2022 と 2023 で発表した内容をもとにご紹介します。 並行と並列はよく似た言葉ですが、本記事では次のような意味で使います。 並行処理(concurrent processing)は、「複数の独立した実行単位が、待っていればいつか終わる(もしくは、処理が進む)」という論理的な概念で、古典的にはタイムシェアリングシステムなどが挙げられます。 並列処理(parallel processing)は、「複数の独立した実行単位のうちのいくつかが、あるタイミングで同時に動いている」という物理的な概念で、古典的には複数のCPU上で同時に実行させる、というものです。最近では、1つのCPU上で複数コアが同時に動いている、という

        Rubyの並列並行処理のこれまでとこれから - クックパッド開発者ブログ
      • 並列処理がとても苦手なPythonはプロセスを分けよう コードを書く時に意識したい2つのTipsと2つの落とし穴

        Go、Python、Kotlin、Rust、TypeScript の5つの言語について「並列処理、並行処理の手法」というテーマに絞り解説する「並列処理をGo/Rust/Kotlin/Python/JSで解説!思想の違いを体感しよう」。Python編では橘氏が登壇。Pythonで並列処理を行う際の設計方針と、実装上の癖について話します。 西川氏の自己紹介 西川大亮氏(以下、西川):ここからはPython編の「ちょっとしたデータ分析の並列化」というタイトルで、西川から話します。 GOに勤める西川です。今やっているのは、タクシーやハイヤーの営業支援。「お客さんを乗っけていない時間、どこを走ったらいいの?」とか「どういうところで待っていたら注文来やすいの?」というところのナビをする、「お客様探索ナビ」というサービスのいろいろなことをしています。小さなサービスなのでいろいろやっている感じですね。 P

          並列処理がとても苦手なPythonはプロセスを分けよう コードを書く時に意識したい2つのTipsと2つの落とし穴
        • Python 3.12で増えた並列処理と、これまでの並列処理の挙動を比べてみる - Qiita

          この記事ですることを3行で Pythonの標準ライブラリでできる並列実行を、あらためて総当たりで速度比較しよう ウォーターフォールチャートで、それぞれの並列処理の処理時間の特徴を可視化しよう boto3の実行をモデルケースにして、どの並列処理が一番早いのかを調べよう この記事の結論を先に Python 3.12から本格的に使えるようになったサブインタープリターは、CPUで実行する処理について言えば、従来のサブプロセスよりも高速 boto3の実行は、サブインタープリターよりも署名付きURLの非同期実行のほうが速い → S3からの10ファイルの取得であれば、実行時間を90%削減できます → Bedrockの3回実行であれば、実行時間を60%削減できます 今回使ったソースコードはこちらに置いています。 お手持ちの環境で再実行できるようにしていますので、気になる方はぜひ。 どうしてこの記事を書くの

            Python 3.12で増えた並列処理と、これまでの並列処理の挙動を比べてみる - Qiita
          • SQLite、複数クライアントからの同時書き込みを可能にする「BEGIN CONCURRENT」文を実装へ

            SQLite、複数クライアントからの同時書き込みを可能にする「BEGIN CONCURRENT」文を実装へ SQLiteの開発チームは、複数クライアントからの同時書き込みを可能にするBEGIN CONCURRENT文を実装していることを明らかにしました。 これまでSQLiteでは書き込みの同時実行はできず、つねに1つのクライアントだけが書き込み可能でした。 同時書き込み処理は、データベースのジャーナルモードが「wal」(Write-Ahead-log)もしくはwalを改良した「wal2」で、BEGIN CONCURRENT文を実行した場合に可能となります。 どのように同時書き込み処理が行われるのかについては、上記のWebページの説明を引用しましょう。 ロックが延期されることで同時書き込みが可能に まず、書き込み時のロックがCOMMITまで延期されることで同時書き込みが実現されると説明されて

              SQLite、複数クライアントからの同時書き込みを可能にする「BEGIN CONCURRENT」文を実装へ
            • Pythonがグローバルインタプリタロックの解消へ、マルチスレッド処理の高速化実現

              Python Software Foundationのステアリングカウンシル(Steering Council)は、Pythonのグローバルインタプリタロック(Global Interpreter Lock)を解消する方向で開発を進めていくことを明らかにしました。 グローバルインタプリタロックとは? グローバルインタプリタロックとは、その名前が示すとおりインタープリタ全体で1つのロックを持つことです。 これによりシングルスレッドのプログラムにおいては細かなロック制御が不要となって速度の向上がはかれる一方、マルチスレッドの平行性は制限されるという欠点があります。 また、スレッドセーフではないC言語などによるライブラリとの結合が容易となっています。 Pythonの標準実装であるCPythonでは、以前からグローバルインタプリタロックが採用されていました。 グローバルインタプリタロックを解消する

                Pythonがグローバルインタプリタロックの解消へ、マルチスレッド処理の高速化実現
              • ペペロンチーノで学ぶ非同期プログラミングによる並行処理 - Qiita

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

                  ペペロンチーノで学ぶ非同期プログラミングによる並行処理 - Qiita
                • Pythonの非同期処理の基礎とOpenAI APIへ並列リクエストする実践例

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

                    Pythonの非同期処理の基礎とOpenAI APIへ並列リクエストする実践例
                  • PythonのマルチスレッドWSGIサーバーの選定 - methaneのブログ

                    今までuWSGIをシングルスレッド、マルチプロセスで使っていたのだけれども、昔に比べて外部のAPI呼び出しが増えているのでマルチスレッド化を検討している。 uWSGI uWSGIでマルチスレッドを有効にした時は、各workerスレッドがacceptする形で動作する。スレッド数以上の接続をacceptすることがないので安心。 プロセス内のスレッド間ではmutexで排他されて、同時にacceptを実行するのは1スレッドのみに制限されている。つまりthendering herd問題はプロセス間でしか起こらない。マルチスレッド化でプロセス数はむしろCPUコア数まで減らせるので、thendering herd問題はむしろ今よりも軽減できる。(ちなみにプロセス間でもロックしてthendering herdを許さないオプションもあるけど、プロセス間同期は怖いので使っていなかった。) ただしuWSGIのマ

                      PythonのマルチスレッドWSGIサーバーの選定 - methaneのブログ
                    • Rustによる並列処理でDynamoDBへのデータ投入を20倍高速化してみた

                      はじめに 言語として高速だと謳われているRust。そのRustを使用してDynamoDBへのデータ登録処理を直列処理と複数の並列アルゴリズム処理で速度比較してみました。 DynamoDB DynamoDBは公式で以下のように謳われています。 Amazon DynamoDB の応答時間は 1 桁ミリ秒で、最も要求の厳しいアプリケーションでも一貫してこのパフォーマンスを発揮できます。例を挙げると、2022 年の Amazon プライムデーに Amazon DynamoDB は、1 桁ミリ秒のパフォーマンスで、数兆回の API コールに対して 1 秒あたり 1 億 520 万件のリクエストを確実に処理しました。 上記だけみると爆速のようにも思われますが、読み込みと書き込み双方に以下の制限があります。 BatchWriteItemのデータ投入は1回で25リクエストまで、Queryのデータ取得は1回

                        Rustによる並列処理でDynamoDBへのデータ投入を20倍高速化してみた
                      • C++でジョブシステムを作ってみる(1)

                        ジョブシステム (Job System) ゲームエンジンの勉強をしているとジョブシステムの話がよく出てくるので、実際にC++20で実装してみました。マルチスレッドに慣れていないため、正しいアプローチである確信はありません。重要なミスがあったら教えていただけると助かります。 コードは標準ライブラリにある機能は素直に使い、シンプルな実装を目指します。また、この記事の全てのコードはパブリックドメインとします。 これから、3つのステップでジョブシステムを実装していきます。 ジョブを並列実行する機能 ジョブ同士に依存関係を設定する機能 大きなジョブを分割して並列化する機能 この記事ではステップ1の最も基本的なジョブシステムを実装することを目標にします。 実装に入る前に、雰囲気を伝えるために、各ステップにおけるインターフェイスを示します。 // スレッド数4としてジョブシステムを作成 JobSyste

                          C++でジョブシステムを作ってみる(1)
                        • Python3.12で新たにサポートされたsub-interpretersの紹介 | gihyo.jp

                          門脇(@satoru_kadowaki)です。11月の「Python Monthly Topics」は、Python 3.12の新機能であるsub-interpretersについて紹介します。 2023年10月2日に「 Python 3.12.0 」がリリースされました。今回も気になる新機能が多く、本記事で紹介するsub-interpretersもPythonで並列処理を行うための新機能です。 Python 3.12の新機能については以下のリンクを参照してください。 What’s New In Python 3.12 -Python 3.12.0 Documentation 本記事ではPythonにおける並列実行のこれまでと、sub-interpretersが現状どのように使用できるかについて説明します。 なお、執筆にあたり先日開催されたPyCon APAC 2023において、sub-in

                            Python3.12で新たにサポートされたsub-interpretersの紹介 | gihyo.jp
                          • ChatGPTの画期的な点とは ~並列処理ができるのが大きな強み【これからはじめるChatGPTの基礎知識】

                              ChatGPTの画期的な点とは ~並列処理ができるのが大きな強み【これからはじめるChatGPTの基礎知識】
                            • Ruby 3.3正式リリース。YJITコンパイラの大幅な性能向上、RubyのスレッドスケジューラとしてM:Nスレッドスケジューラ導入など新機能

                              Ruby開発チームは、2023年12月25日にRuby 3.3の正式リリースを発表しました。Rubyは毎年12月25日に新バージョンをリリースすることが恒例となっており、今回も予定通りに新バージョンが登場しています。 Ruby 3.3では、Shopifyが中心となって開発を進めてきたJITコンパイラのYJITコンパイラの大幅な性能向上、Rubyに同梱されているdefault gemとしてPrismパーサの導入、よりコストの小さなM:Nスレッドスケジューラの導入など新機能が加わっています。 Rubyはもともとインタプリタとして登場しましたが、現在では実行速度向上のためにJITコンパイラを取り入れるようになっています。 Ruby 3.1でメインラインにマージされたYJITコンパイラは、ECサイト構築サービスを提供するShopifyが、大規模なRailsアプリケーションにおいてより高い性能向上を

                                Ruby 3.3正式リリース。YJITコンパイラの大幅な性能向上、RubyのスレッドスケジューラとしてM:Nスレッドスケジューラ導入など新機能
                              • 遺伝的アルゴリズムに並列化プログラミングの実施と考察 - Qiita

                                前回の続きです 遺伝的アルゴリズムのサンプルコード 参考文献 「C言語による画像処理入門」2000/11/1 (著)安居院 猛、長尾 智晴 文献のAmazon 準備 # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt from threading import Thread class threadAndReturn(Thread): def __init__(self, group=None, target=None, name=None, args=(), kwargs=None, *, daemon=None): Thread.__init__(self, group, target, name, args, kwargs, daemon=daemon) self._return = N

                                  遺伝的アルゴリズムに並列化プログラミングの実施と考察 - Qiita
                                • GitHub - HigherOrderCO/Bend: A massively parallel, high-level programming language

                                  You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

                                    GitHub - HigherOrderCO/Bend: A massively parallel, high-level programming language
                                  • GitHub - tidwall/neco: Concurrency library for C (coroutines)

                                    Coroutines: starting, sleeping, suspending, resuming, yielding, and joining. Synchronization: channels, generators, mutexes, condition variables, and waitgroups. Support for deadlines and cancelation. Posix friendly interface using file descriptors. Additional APIs for networking, signals, random data, streams, and buffered I/O. Lightweight runtime with a fair and deterministic scheduler. Fast use

                                      GitHub - tidwall/neco: Concurrency library for C (coroutines)
                                    • KVSあるいはKVSベースのNewSQLに高速なAuto Incrementを実装する | CyberAgent Developers Blog

                                      AI事業本部の黒崎( @kuro_m88 )です。 MySQL、PostgreSQLのようなRDBとAmazon DynamoDBやCloud SpannerのようなNoSQL、NewSQL系のDBを比較したときに、後者はRDBのauto incrementのような機能を実装しようとすると前者と比較して性能が出ない問題があります。この問題に対してRedisのLua Scriptingを用いて採番用のキャッシュを実装し、併用することで高速化した事例を紹介します。 本記事ではAmazon DynamoDBやCloud Spannerが採用されている環境を想定します。特に特定のDBに依存した考え方ではないので、その他のKVSやKVSベースのNewSQLにも応用できる考え方かと思います。手法を検討するのに使ったコードはGoで実装しました。 前提 前提としてKVSのような分散DBにおいて、auto

                                        KVSあるいはKVSベースのNewSQLに高速なAuto Incrementを実装する | CyberAgent Developers Blog
                                      • [Python] Boto3でのスレッドセーフまとめ。3種類のオブジェクトこれだけ覚えておけばOK | DevelopersIO

                                        基本的にはclientが唯一の(マルチスレッドにおける)スレッドセーフなオブジェクトです。しかしネットワーク実装の関係から、マルチプロセスでは使用しないのが無難なようです。つまりマルチプロセスでは、すべてのBoto3オブジェクトは共有できません。 clientについて補足 clientはそのまま使用する分にはスレッドセーフですが、一部注意しなければいけない点があります。こちらをドキュメントから引用します。 Shared Metadata: Clients expose metadata to the end user through a few attributes (namely meta, exceptions and waiter_names). These are safe to read but any mutations should not be considered thr

                                          [Python] Boto3でのスレッドセーフまとめ。3種類のオブジェクトこれだけ覚えておけばOK | DevelopersIO
                                        • Goルーチンとチャネルを使用した並行・並列処理 具体的なコードをよく起こるトラブルとともに紹介

                                          Go、Python、Kotlin、Rust、TypeScript の5つの言語について「並列処理、並行処理の手法」というテーマに絞り解説する「並列処理をGo/Rust/Kotlin/Python/JSで解説!思想の違いを体感しよう」。Go編では森下篤氏が登壇。Goの並列・並行処理のやり方を紹介します。 Goの並列・並行処理 森下篤氏(以下、森下):私のところでは、Golangについて説明します。弊社は会社名もGOなので非常にわかりにくいのですが、基本的には大文字で「GO」と書くと会社を示すことが多いです。(スライドを示して)小文字の「Go」やスライドのアイコンを使った時には、言語のGoと思ってもらえると助かります。 まず、Goでの並列・並行処理について話します。独自の軽量スレッドであるGoルーチンというものがあって、Goルーチン同士の同期・非同期通信の仕組みであるチャネルが構文に含まれてい

                                            Goルーチンとチャネルを使用した並行・並列処理 具体的なコードをよく起こるトラブルとともに紹介
                                          • Javaの並列/並行処理の基本

                                            2023.06.29 JJUG Java仕様勉強会資料

                                              Javaの並列/並行処理の基本
                                            • USB Type-Cによる並列バッテリ充電、この手法は消費者に何をもたらすのか?

                                              はじめに USB Type-Cでは、旧世代のUSBと比べてはるかに高い柔軟性が得られます。そのため、USB Type-C(以下、USB-C)に対応するポートは、民生用機器において標準的に使用されるようになりました。そうした機器では、より多くの電力に対応しつつ、より長いバッテリ寿命を実現することが強く求められています。つまり、より高い電力レベルで充電できるようにしなければならないということです。本稿では、まず並列に接続したバッテリを充電(以下、並列バッテリ充電)するためのアーキテクチャについて説明します。その基本とユース・ケースについて押さえた上で、USB-Cを利用して充電を行う方法と得られる効果について解説します。更に、USB-Cを利用した並列バッテリ充電が民生機器の市場にもたらすメリットとデメリットについてまとめます。 並列バッテリ充電とは何なのか? バッテリ管理(バッテリ・マネージメン

                                                USB Type-Cによる並列バッテリ充電、この手法は消費者に何をもたらすのか?
                                              1