並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 40 件 / 208件

新着順 人気順

concurrentの検索結果1 - 40 件 / 208件

concurrentに関するエントリは208件あります。 programmingプログラミング並列処理 などが関連タグです。 人気エントリには 『1000万件オーバーのレコードのデータをカジュアルに扱うための心構え - joker1007’s diary』などがあります。
  • 1000万件オーバーのレコードのデータをカジュアルに扱うための心構え - joker1007’s diary

    自分が所属している会社のメンバーの教育用資料として、それなりの規模のデータを扱う時に前提として意識しておかなければいけないことをざっくりまとめたので、弊社特有の話は除外して公開用に整理してみました。 大規模データ処理、分散処理に慣れている人にとっては今更改めて言うことじゃないだろ、みたいな話ばかりだと思いますが、急激にデータスケールが増大してしまったりすると環境に開発者の意識が追い付かないこともあるかと思います。 そういったケースで参考にできるかもしれません。 弊社は基本的にAWSによって運用されているので、AWSを前提にした様なキーワードやサービス名が出てきます。後、句読点があったり無かったりしますが、ご容赦ください。 追記: 社内用の資料の編集なのでかなりハイコンテキストな内容だから誤解するかもしれませんが、これらはそもそもRDBの話ではありません。(関係無くは無いけど) 1000万オ

      1000万件オーバーのレコードのデータをカジュアルに扱うための心構え - joker1007’s diary
    • 世界中のITエンジニアが悩まされている原因不明でテストが失敗する「フレイキーテスト」問題。対策の最新動向をJenkins作者の川口氏が解説(前編)。DevOps Days Tokyo 2022

      世界中のITエンジニアが悩まされている原因不明でテストが失敗する「フレイキーテスト」問題。対策の最新動向をJenkins作者の川口氏が解説(前編)。DevOps Days Tokyo 2022 世界中のITエンジニアが悩まされている問題の1つに、テストが原因不明で失敗する、いわゆる「フレイキーテスト」があります。 フレイキーテストは、リトライすると成功することもあるし、失敗する原因を調べようとしてもなかなか分かりません。GoogleやFacebookやGitHub、Spotifyといった先進的な企業でさえもフレイキーテストには悩まされています。 このフレイキーテストにどう立ち向かうべきなのか、Jenkinsの作者として知られる川口耕介氏がその最新動向を伝えるセッション「Flaky test対策の最新動向」を、4月21日、22日の2日間行われたイベント「DevOps Days Tokyo 2

        世界中のITエンジニアが悩まされている原因不明でテストが失敗する「フレイキーテスト」問題。対策の最新動向をJenkins作者の川口氏が解説(前編)。DevOps Days Tokyo 2022
      • CPUとGPUのマルチスレッディングの違いについて - arutema47's blog

        "Locality is efficiency, Efficiency is power, Power is performance, Performance is King", Bill Dally マルチスレッディングとは? CPUとGPUのマルチスレッディングの違いをブログにまとめていたけど例によって誰も興味なさそう— arutema47 (@arutema47) 2021年8月16日 つぶやいたら読みたい方が多そうだったので完成させました。 マルチスレッディングとはメモリ遅延を隠蔽しスループットを上げるハードウェアのテクニックです。 ただCPUとGPUで使われ方がかなり異なるため、その違いについて考えてみる記事です。 (SIMDについて並列プログラミングの観点から触れるべきでしたが、時間無いマルチスレッディングに注目するため初版では省きました。) 本記事について 本記事はCPUとG

          CPUとGPUのマルチスレッディングの違いについて - arutema47's blog
        • マルチスレッド・プログラミングの道具箱

          まえがき クラウド上の仮想サーバから手元のスマートフォンまで、いまや複数のCPUコアを搭載するマルチコアはどこにでもある環境になりました。ハードウェア側が並列(Parallel)・並行(Concurrent)処理に向けて急速に進化する一方で、ソフトウェア側つまりプログラミング言語の進化はさほど追い付いていません。並行処理記述の手軽さを求めた Go言語 や、マルチスレッド処理の安全性を重視する Rust言語 などが登場してはいるものの、「普通にプログラムを記述するだけで複数CPUコア環境で高速に走るプログラミング言語」は遠い夢物語のままです。 モダンなプログラミング言語や並列・並行処理ライブラリは、複雑で難解なマルチスレッド処理を直接記述しなくてすむよう、安全性・利便性の高い抽象化レイヤを提供します(例:Go言語のgoroutineとchannel、Rust言語の Rayonライブラリ)。し

            マルチスレッド・プログラミングの道具箱
          • 徐々に高度になるリングバッファの話 - Software Transactional Memo

            リングバッファのイメージ図 1. リングバッファとは何か 機能的にはFirst In First Out (FIFO)とも呼ばれるキューの一種であるが、リング状にバッファを置いてそれの中でReadとWriteのインデックスがグルグルと回る構造をとる事によって容量に上限ができることと引き換えに高速な読み書き速度を得たものである。キューを単に実装するだけなら山ほど方法があって線形リストを使ってもいいしスタックを2つ使っても原理的には可能だ。その中でもリングバッファを用いた方法の利点はひとえに性能の高さでありメモリ確保などを行わないお陰でシステム系の様々な場所で使われている。 これの実装自体は情報系の大学生の演習レベルの難度であるが少し奥が深い。まずリングバッファのスタンダードなインタフェースと実装は以下のようなものである。 class RingBuffer { public: explicit

              徐々に高度になるリングバッファの話 - Software Transactional Memo
            • なぜもっとたくさんのコアを搭載したCPUを作らないのでしょうか?2000コアのGPUなんかそこら辺にありますが、なぜCPUでは同じようにできないのでしょうか?

              回答 (6件中の1件目) GPUで言うコア数とはFMA(Floating Multiply-Add)と呼ばれる演算器の数です。FMAとはいわゆる一次式 y=ax+bを解くための回路で、式に浮動小数(Float)の掛け算(Multiply)と足し算(Add)があるのでFMAです。GPUがよく活用される3D演算では4x4の行列同士の掛け算や行列にベクトルを掛けるような処理を頻繁に使います。これはアフィン変換と言われるものですが、アフィン変換とは一次式を複数同時に行う計算の事です。例えば4x4行列同士の掛け算は64回の一次式(FMA)のセットです。また行列とはマトリクスとも呼び、4本(ないし3...

                なぜもっとたくさんのコアを搭載したCPUを作らないのでしょうか?2000コアのGPUなんかそこら辺にありますが、なぜCPUでは同じようにできないのでしょうか?
              • 「トランザクション張っておけば大丈夫」と思ってませんか? バグの温床になる、よくある実装パターン

                この記事は DeNA 20 新卒 Advent Calendar 2020 19日目の記事です。 はじめに MySQLやPostgreSQLに代表されるRDBMSではトランザクションと呼ばれる仕組みが提供されています。多くのWebアプリケーションエンジニアはこのトランザクションを駆使してDBとやりとりをするロジックを組み立てることになります。 しかし不整合を起こしたくない処理があるからといって闇雲にトランザクションを張ったり、トランザクションが張られているからと安心してアプリケーション側で闇雲にロジックを組み立ててしまうと思わぬバグを生むことになってしまいます。 このエントリでは、「トランザクションを張っておけば大丈夫」という考え方は危険な場合もあるということを、ありがちな実装例を交えて紹介していきます。 並列に処理されるトランザクション そもそも、トランザクションは全て直列に処理されるわ

                  「トランザクション張っておけば大丈夫」と思ってませんか? バグの温床になる、よくある実装パターン
                • Build your own React

                  We are going to rewrite React from scratch. Step by step. Following the architecture from the real React code but without all the optimizations and non-essential features. If you’ve read any of my previous “build your own React” posts, the difference is that this post is based on React 16.8, so we can now use hooks and drop all the code related to classes. You can find the history with the old blo

                    Build your own React
                  • リレーショナルデータベースシステムを趣味で開発している者です。 現在、開発中のシステムを並行トランザクションへ対応させることを検討しており、どのような手法があるのか調べたところ、SS2PLもしくはS2PLという手法が私と同じように自作をされている方々の中では多く採用されているようだと分かりました。 一方で、PostgreSQLやMySQLなどのプロダクションレベルで利用されているシステムではMVCCと呼ばれる手法が採用されているということも分かりました。 きっと後者の方が多くの場合で高いスループットが得ら

                    リレーショナルデータベースシステムを趣味で開発している者です。 現在、開発中のシステムを並行トランザクションへ対応させることを検討しており、どのような手法があるのか調べたところ、SS2PLもしくはS2PLという手法が私と同じように自作をされている方々の中では多く採用されているようだと分かりました。 一方で、PostgreSQLやMySQLなどのプロダクションレベルで利用されているシステムではMVCCと呼ばれる手法が採用されているということも分かりました。 きっと後者の方が多くの場合で高いスループットが得られるということなのだと思うので、可能であればMVCCを採用したいのですが、あまり初学者向けの実装例も見当たらず、どうしたものかと悩んでおります。 SS2PL/S2PLとMVCCの実装の難易度・工数はどの程度違うものなのでしょうか? また、初めてリレーショナルデータベースシステムを開発する者

                      リレーショナルデータベースシステムを趣味で開発している者です。 現在、開発中のシステムを並行トランザクションへ対応させることを検討しており、どのような手法があるのか調べたところ、SS2PLもしくはS2PLという手法が私と同じように自作をされている方々の中では多く採用されているようだと分かりました。 一方で、PostgreSQLやMySQLなどのプロダクションレベルで利用されているシステムではMVCCと呼ばれる手法が採用されているということも分かりました。 きっと後者の方が多くの場合で高いスループットが得ら
                    • オンラインゲーム 10年の進化と同期方式の選び方 - きゅぶろぐ

                      オンラインゲームを作ろう!と思ったことがある方は、 こちらの講演記事を1度は見たことがあるのではないでしょうか。 www.4gamer.net こちらの講演は、具体例を交えながら非常に分かりやすくオンラインゲームの主な同期方式が説明してあり、 2024年現在でもオンラインゲームの基礎を学ぶ資料として真っ先に名前を上げる最高の資料です。 しかしながら講演は2010年のものであり、オンラインゲームはこの10年余りで進化しています。 この辺りの進化の話を簡単にまとめつつ、オンラインゲームの同期方式の選び方を紹介します。 (上記講演記事の知識/用語を前提としているため、先に上記記事をお読みください。) オンラインゲームの民主化について 技術の話をする前に。 近年、「マルチプレイヤーゲーム」と聞いてオフラインの画面分割ゲームを想像する人はいないと言って良いほど オンラインゲームは民主化されてきました

                        オンラインゲーム 10年の進化と同期方式の選び方 - きゅぶろぐ
                      • Go言語を嫌う6個の理由 - さめたコーヒー

                        ある仕事でそれまでRubyで書かれていたサーバーサイドをGo言語ですべて書き直すことになって、それまでRubyのコードを書いていた僕はそのままGo言語を書くことになった。その仕事そのものはお客様(僕は外部委託のエンジニアとして参画していた)との関係も良好で素晴らしい仕事をさせてもらうことができたと思っているが、Go言語だけは好きになれなかった。 はじめは流行っている言語だから何か素晴らしい魅力があるのではないかと期待していた。しかし書き始めるうちにどうも自分には合わないなと思うようになり、2年ほど書いて案件の契約が終わる頃にはGo言語でサーバーサイドを書くことは危険だとさえ思うようになった。 あれから数年がたちますますGo言語の案件は増えている。サーバーサイドを書く選択肢としてGo言語を選択する会社も増えている。しかし本当にそれでいいのか?ただ流行っているからという理由だけで選択するにはあ

                          Go言語を嫌う6個の理由 - さめたコーヒー
                        • Rustの非同期プログラミングをマスターする - OPTiM TECH BLOG

                          こんにちは、R&Dチームの齋藤(@aznhe21)です。 さあみなさん、ついにこの時がやってまいりました。 本日2019/11/8にリリースされたRust 1.39により、あらゆる環境で最高速な非同期プログラミングが可能になりました。 新たな時代に乗り遅れないよう、今のうちにRustでの非同期プログラミングをマスターしておきましょう。 なお、この記事は、先日開催したOPTiM TECH BLOG Meetupの内容を大幅に加筆修正した上でエントリに仕上げたものです。 まず最初に伝えたいこと 非同期の歴史 Rustの非同期プログラミングの歴史 Rust 1.0以前 Rust 1.0 〜Rust 1.3 Rust 1.2あたり Rust 1.11あたり Rust 1.26あたり Rust 1.36 Rust 1.39 Rustの非同期プログラミングの特徴 ゼロコスト抽象化 プラットフォーム非依

                            Rustの非同期プログラミングをマスターする - OPTiM TECH BLOG
                          • 【JavaScript】本日未明、[ async - await ]さんが死体で発見され... - Qiita

                            「な、なんじゃこりゃあああぁあっtっt!!!!」 ・・・ ・・・ ・・・ 非同期処理を"ちゃんと"理解して使いたい 『非同期処理なんとなくの理解で書いている...』 『動いてるし、ヨシ!』 令和プログラマー*1である私自身、なるべく気を付けようと思っていますが、ついついなんとなくで書いてしまいそうになります。 (*1: 令和になってからプログラミングを知った人。初心者のこと。) ちなみに冒頭のコードは、「並列でいける処理をつい直列でやってしまっている」 例です。 実際に手を動かしながら非同期処理の理解を深める 本記事は以下の構成で、順を追って非同期処理を学習し、明日から自信を持って非同期処理が書けるようになるためのハンズオンです。 JSの非同期処理について知る Promise について知る Async / Await を使えるようにする 冒頭のコードがリファクタリングできるようになる 実際

                              【JavaScript】本日未明、[ async - await ]さんが死体で発見され... - Qiita
                            • 圧縮ファイルの展開速度を最大1万倍超高速化するデータ構造を広島大が考案

                              広島大学は8月31日、富士通研究所と共同で、多くのデータ圧縮方式で採用されている「ハフマン符号」の並列展開処理を高速化する新しいデータ構造「ギャップ配列」を考案したことを発表した。NVIDAのGPU「Tesla V100」を用いて実験した結果、従来の最速展開プログラムと比較して、2.5倍から1万1000倍の高速化を達成できたとしている。 同成果は、同大学大学院先進理工系科学研究科の中野浩嗣教授らの共同研究チームによるもの。詳細は、2020年8月に開催された国際会議「International Conference on Parallel Processing (ICPP)」において発表され、269件の投稿論文の中から最優秀論文賞に選ばれた。 インターネットを介して多数の画像ファイルや動画ファイルなどを転送したり、また記録メディアに保存したりする際、データの圧縮は誰でも日常的に行っている。そ

                                圧縮ファイルの展開速度を最大1万倍超高速化するデータ構造を広島大が考案
                              • 書評:並行プログラミング入門 - Software Transactional Memo

                                TL;DR 並行処理を実装する人のこれからのスタンダードになる一冊。買い。 並行プログラミング入門 ―Rust、C、アセンブリによる実装からのアプローチ 作者:高野 祐輝 オライリージャパン Amazon 買ったら思いの外早く届いたのでパラパラと読み始めたら一気に読み終えてしまった。 総評 敢えて雑な喩え方をするなら The Art of Multiprocessor Programming (通称TAoMP本) の内容を薄めてRustやアセンブラや計算モデルを足したような本だった。 日本語の書籍としてはかなり珍しくWait-Free, Lock-Free, Obstruction-Freeの違いなどを適切に論じており、TTAS Lock, MCS Lock, TL2といった日本語では希少な情報が書かれているレアな本である。これらに付いて論じている日本語の本は知る限り (TAoMP本と昔僕

                                  書評:並行プログラミング入門 - Software Transactional Memo
                                • Goでの並行処理を徹底解剖!

                                  並行処理をうまく使うのは難易度が高めです。 それゆえに、go文とチャネルについて基本的な文法書で知った後「並行処理ちゃんとできる!」の段階まで自力でたどり着くのは大変でしょう。 この本は、 *「並行処理ってやって何が嬉しいの?」 *「ゴールーチンとかチャネルとかって一体何者?」 *「ゴールーチンやチャネルを使ったうまいコードの書き方が知りたい!」 *「Goランタイムで並行処理をどううまく処理しているか知りたい!」 といった要望にお答えする、「Goでの並行処理」に関連した事柄について網羅的・徹底的に書きまくったものです。

                                    Goでの並行処理を徹底解剖!
                                  • 「強いメモリモデル」と「弱いメモリモデル」 - yamasaのネタ帳

                                    Apple M1についての面白い記事を見かけて、久しぶりにメモリモデル屋(?)の血が騒いだのでブログを書く。 note.com 強いメモリモデル 現代のCPUアーキテクチャでは、x86(64bit, 32bitどちらも)が「強いメモリモデル」を採用しており、それ以外のメジャーなCPUが「弱いメモリモデル」を採用している。この「強いメモリモデル」「弱いメモリモデル」について、まずおさらいしておこう。 以下のように、2つの変数a, bに対して異なるCPUコアが同時にアクセスしたとする。 int a = 0; int b = 0; CPU1: a = 1; b = 1; CPU2: int r1 = b; int r2 = a; (上記はC言語に似た疑似コードを用いているが、実際は機械語命令になっていると考えてほしい。つまり、CPU1は変数a, bの示すメモリアドレスに対するストア命令を実行して

                                      「強いメモリモデル」と「弱いメモリモデル」 - yamasaのネタ帳
                                    • JavaScriptの非同期処理を理解する その2 〜Promise編〜 | さくらのナレッジ

                                      こんにちは!小田島です。前回の「コールバック編」を納稿したとき、アイキャッチ画像はJavaScriptのロゴにタイトルの文字を入れただけというとんでもないやっつけ仕事だったのですが、さくナレ編集部の方に「シリーズで理解が深まる」というすごい煽り文句がついたとてもカッコいい画像に差し替えていただきました。アイキャッチ詐欺にならないようにがんばります。 非同期処理シリーズの2回目はPromiseについての説明です。前回はコールバックについて説明しましたが、Promiseを使うことでどのように便利になったのでしょうか。それでは見ていきましょう!今回はコードが多いのでかなり分量が多く感じられるかもしれませんが、実際はあまり大したことはありません。 今回の目的 今回説明するのはPromiseです。これはFutureパターン(Promiseパターン)というデザインパターンの一種で、ECMAScript

                                        JavaScriptの非同期処理を理解する その2 〜Promise編〜 | さくらのナレッジ
                                      • Python で大量のファイルを並列で速く読み込む - Qiita

                                        from glob import glob files = glob('data/*.csv') len(files) # 10000 この 1万件の CSV ファイルを Pandas DataFrame として読み込みたい。 ちなみに検証用のデータは以下のようにして生成した。 (3列 x 10,000行 の CSV ファイル 10,000 個) import numpy as np import pandas as pd row_n = 10000 col_n = 3 columns = [f'col{i}' for i in range(col_n)] for i in range(10000): df = pd.DataFrame(np.random.randn(row_n, col_n), columns=columns) df.to_csv(f'data/{i:04}.csv',

                                          Python で大量のファイルを並列で速く読み込む - Qiita
                                        • えっちな grep をつくった - はやくプログラムになりたい

                                          H(uman-friendly) な grep コマンド hgrep をつくりました. github.com '\w+ で検索した時の出力 ファイルを特定のパターンで検索し,マッチした箇所を構文ハイライトしたコード片で表示します.超ざっくり言うと,ripgrep で検索して bat でマッチ箇所付近を表示するような感じです. grep -C によるコンテキスト表示に似ていますが,マッチ行が近い時は1つのコード片にまとめる,周囲何行を表示するかをヒューリスティックに少し賢く決めているなど,ちょっと出力は工夫しています. 動機 手元のリポジトリでコードを検索する時は 単純に grep で検索してマッチ結果を眺める grep | fzf のように検索結果を fzf で絞り込んだりプレビューする vim $(grep -l ...) のように検索結果をエディタで開く あたりを使い分けているのですが

                                            えっちな grep をつくった - はやくプログラムになりたい
                                          • シングルスレッドやマルチプロセスなどの並行処理の話について、 すぐに忘れてしまいます。 どうしたらもっと知識が定着すると思いますか? 色んなライブラリーで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つの落とし穴
                                                • UNIXシェルの並列化により最大34倍高速化する「PaSh」、米MITなどが開発 プログラム結果も正確

                                                  Innovative Tech: このコーナーでは、テクノロジーの最新研究を紹介するWebメディア「Seamless」を主宰する山下裕毅氏が執筆。新規性の高い科学論文を山下氏がピックアップし、解説する。 米ペンシルベニア大学、米MIT、ポーランドのXIV Staszic High School、米国の研究機関Aarno Labs、米Stevens Institute of Technologyによる研究チームが開発した「Practically Correct, Just-in-Time Shell Script Parallelization」は、UNIXシェルで実行されるプログラムの速度を精度を保証しながら劇的に加速させるシステムだ。 このシステムはUNIXシェルにおいて、スクリプトを先読みして並列化を行う。これによりプログラム結果を正確な上で最大34倍高速化し、Webインデックスや自然

                                                    UNIXシェルの並列化により最大34倍高速化する「PaSh」、米MITなどが開発 プログラム結果も正確
                                                  • 【PHP8.1】PHPで簡単に非同期処理を書けるようになる - Qiita

                                                    PHPは長きにわたり同期的、すなわち、あらゆる処理を上から順に実行していくというスタイルを取ってきました。 しかしたとえば、複数のURLからデータを取ってきて結果をまとめたいといった場合、時間のかかるHTTPリクエストは同時に投げたいですよね。 この用途にはGuzzleというライブラリが存在し、これを使えば同時にリクエストを投げられます。 しかし、ではHTTPアクセスとDBアクセスを同時にやりたい場合は? 時間のかかる計算を裏でやりたい場合は? などと考え始めると、こういった個別のライブラリでは対処しきれません。 ということで汎用的な非同期処理をPHPで書けるようにするRFCが提出されました。 PHP RFC: Fibers Introduction 人類史上ほぼ全ての期間において、人々はPHPを同期的なコードとしてのみ書いてきました。 同期的に実行されるコードのみが存在し、そしてそれを同

                                                      【PHP8.1】PHPで簡単に非同期処理を書けるようになる - 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」文を実装へ
                                                      • AWS ECS Fargate のCPU性能と特徴 | 外道父の匠

                                                        ちょいとした用途において、カジュアルにFargateの起動/停止を繰り返して、気ままに負荷全開かけていたら、あまりの違和感にCPU割り当てについて調査することにしました。 最近こんなことばっかやってる気がしますが、気に食わんかったからムカムカ解消に書くしかないんや。半分くらいブラックボックス与太話な感じで夜露死苦です。 はじまり とある処理を全開でFargateにやらせて、cpu=1024(100%), 2048(200%), 4096(400%) でどのくらい RPS (requests per second) でるかを計測していると、想定通りならほぼ比例でRPSが伸びるはずが、全然そうならないパティーンに遭遇。 並列過剰やエラー・バグ起因ではないことをほぼ確させた上で、まさかCPUガチャじゃあるまいなと試したら、まんまCPUガチャでしたということで、EC2からある話ではありますが、現在

                                                          AWS ECS Fargate のCPU性能と特徴 | 外道父の匠
                                                        • Go言語でのテストの並列化 〜t.Parallel()メソッドを理解する〜

                                                          この記事は、Merpay Tech Openness Month 2020 の6日目の記事です。 メルペイでBackendエンジニアをしている柴田(@yoshiki_shibata)です。この記事では、Go言語のtestingパッケージに用意されている並列化の機能について説明します。 Go言語では、テストコードを作成するためのtestingパッケージが用意されています。一般に開発するソフトウェアの規模が大きくなるに従って、作成されるテストコードの量も多くなり、すべてのテストが終了するまでの時間も長くなっていきます。特に、データベースへアクセスするようなテストでは、データベースへの通信時間がテスト時間の多く占めますので、テストコードを逐次実行するよりは並列実行することで、テスト時間を短縮できます(厳密には用語「並行」ですが、t.Parallel()メソッドの説明なので、この記事では用語「並列

                                                            Go言語でのテストの並列化 〜t.Parallel()メソッドを理解する〜
                                                          • 並行処理の基礎を学ぼう - Enablement Workshop for Gophers

                                                            はじめに 2023年5月10日に開催されたEnablement Workshop for Gophersで「並行処理の基礎を学ぼう」というタイトルで講義を行ないました。 Enablement Workshop for Gophersは、ナレッジワークが学生向けに提供する手を動かしながら基礎を学ぶ"Enablement"の機会です。 今回のテーマは2023年6月21日〜23日に行われるEnablement Internship for Gophersに合わせて『並行処理』です。 具体的には主に以下のような並行処理の基礎や最近または今後のアップデートについてお話しました。 ゴールーチンとチャネル syncパッケージ コンテキスト 講義の様子はYouTubeで公開されています。 ゴールーチンとチャネル Goの有名な特徴の1つとしてゴールーチンとチャネルを用いた並行処理があります。 講義では、ゴー

                                                              並行処理の基礎を学ぼう - Enablement Workshop for Gophers
                                                            • POSIX準拠シェルスクリプトでマルチコアの能力を活用する並列処理の実装(最大並列数あり、GNU Parallel, xargsなし) - Qiita

                                                              実は最大並列数の制限がなければジョブ(標準入力からの一行単位のデータ)の数だけバックグラウンドプロセスを起動すればいいのでかなり簡単に実装できます。ですが普通は嫌ですよね?ということで最大並列数を制限する処理を入れています。また通常の利用で必要になりそうな CTRL-C と TERM シグナルへの対応もしています。 #!/bin/sh set -eu [ "${ZSH_VERSION:-}" ] && setopt shwordsplit MAX_PROC=4 # 最大並列数 # INT(CTRL-C)、TERM による終了処理 terminate() { trap '' TERM kill -TERM 0 exit "$1" } trap "terminate 130" INT trap "terminate 143" TERM # trap : CONT # 並列で実行される処理 fu

                                                                POSIX準拠シェルスクリプトでマルチコアの能力を活用する並列処理の実装(最大並列数あり、GNU Parallel, xargsなし) - Qiita
                                                              • Pythonがグローバルインタプリタロックの解消へ、マルチスレッド処理の高速化実現

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

                                                                  Pythonがグローバルインタプリタロックの解消へ、マルチスレッド処理の高速化実現
                                                                • GoとRust - 並行処理編

                                                                  GoとRustの変更処理を比較することで両者を深く理解する試みです。 詳しい内容やスライドでは省いたところをブログに書きました https://zenn.dev/nasa/articles/compare_rust_go_concurrency

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

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

                                                                      GoogleがBigQueryを安価に提供できる理由は、Borgによる大規模分散コンテナ環境があるから
                                                                    • 言語のスレッド実装の雑な話(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まで)
                                                                      • 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 を自慢したい - クックパッド開発者ブログ
                                                                        • 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

                                                                                  新着記事