Rubyに似た構文を使用し、変数の型やメソッド引数を指定する必要がなく、ネイティブコードへのコンパイルが可能なオープンソースのプログラミング言語・Crystalの開発チームは、最初のメジャーリリースとなる「Crystal 1.0」を3月22日(現地時間)にリリースした。 「Crystal 1.0」では言語の安定性が約束されており、少なくとも今後リリースされるバージョン1.xでは、下位互換性に念頭を置き、標準ライブラリの強化は行うものの、以前のバージョンで作成したコードは修正することなくコンパイルして利用できる。 おもな変更内容としては、文字列および文字リテラルがエスケープシーケンスでUnicodeサロゲートの半分を持つことができなくなったほか、std-libにおける非推奨とされていた定義のほとんどが削除され、マクロのgetterおよびpropertyに戻り値の型注釈が追加された。 そのほか
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アプリケーションにおいてより高い性能向上を
なぜ、ビルドを早くする デプロイ時間の短縮 AutoScaling 等でのインスタンスの追加時間の短縮 CI のビルド時間が短縮 どう、ビルドを早くする 並列性を上げる ビルドキャッシュを効かせる 並列性 本記事では、並列性のみに触れる。 BuildKit を使用する Docker 18.09 のリリースにおいて行われたビルド機能の拡張は、ビルドアーキテクチャーの総見直しにより必要となる機能を導入しています。 BuildKit を統合したことによって、処理性能、ストレージ管理、ツール機能、セキュリティのどれをとっても改善が見られるはずです。 https://matsuand.github.io/docs.docker.jp.onthefly/develop/develop-images/build_enhancements/ $ DOCKER_BUILDKIT=1 docker build
多言語からみるマルチコアの活かし方 はじめに 近年では1つのCPUに複数のコアが搭載されたマルチコアが一般的になっています。 しかし、現状のプログラミング言語ではエンジニアが意識せずにマルチコアをしたプログラムを作ることは難しいです。 そこで、様々な言語から見たマルチコアの活かし方について説明していきます。 プロセスとスレッド プロセスとは1つ1つのアプリケーションといった実行中のプログラムのことで、スレッドは CPU利用の単位です。プロセスは次のように1つ以上のスレッドを持っており、CPUのコア数分だけスレッドを処理することができます。(また、近年ではSMTという技術によって1つの物理コアで2スレッドといった複数のスレッドを処理することができます。2コア4スレッドみたいなやつです) マルチコアを有効活用してプログラムを実行するためにはCPUが処理できるコア数に対して適切な数のスレッドをプ
前回の続きです 遺伝的アルゴリズムのサンプルコード 参考文献 「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
ゼロコピーで瞬時にプロセス間の大規模データ通信を可能にする「Eclipse iceoryx」ミドルウェア、Eclipse Foundationが公開 Eclipse Foundationは、データをコピーすることなく瞬時にプロセス間でデータ通信を可能にするミドルウェア「Eclipse iceoryx」を公開しました。 The first major release of Eclipse #iceoryx allows for true zero-copy inter-process-communication on Linux, QNX and MacOS and provides C and modern C++ user APIs. Visit the release page to learn more: https://t.co/pvRYWIjcco #opensource #au
こんにちは、R&Dチームの齋藤(@aznhe21)です。 初めてのオフィス引っ越し体験が目前でちょっとワクワクしています。 さて、本日2/25(金)にRust 1.59がリリースされました。 この記事ではRust 1.59での変更点を詳しく紹介します。 2/25は映画「未知との遭遇」が日本で公開された日 ピックアップ 定数ジェネリクスでデフォルト値を使えるようになった 分割代入ができるようになった インラインアセンブリが使えるようになった イテレータのzipがフリー関数になった Cargo.tomlでstripを指定できるようになった 安定化されたAPIのドキュメント std::thread::available_parallelism 制限 エラー サンプル Result::copied サンプル Result::cloned サンプル ops::ControlFlow::is_brea
この記事は GMOアドマーケティング Advent Calendar 2021 3日目の記事です。 GMOアドマーケティングのK.Mです。 オンライン開催はYouTubeLiveにより実施され、ボランティアの方によりLive動画はセッション毎に分割されました。 それでは、個人的に良かったセッションを紹介します。 1.PHPで学ぶオブジェクト指向プログラミング入門 参加された小学生からも分かりやすいと言われており、とても理解しやすい説明でした。 個人的に刺激を受けたのは「愚者は経験に学び、賢者は歴史に学ぶ」 歴史を学べは進化の過程だけでなく、未来まで想像出来そう。 2.MySQLとインデックスとPHPer -PHPが本職でもMySQLを手懐けるために 難しい事を、初心者にわかり易く説明できる人ってあまり居ないと感じていますが、相手が得意な事や良く知っている事に極力合わせて説明すると、ここまで
はじめに 随分間が空いてしまいました。 想定外の事象の原因についてとその回避策、そしてまとめ。これで最後です。 前回まで 3 回にわたって手法の検証、計画の作成、実施について記載しました。 AWSアカウント間のS3, DynamoDBデータ移行計画の記録 (背景と転送方法の検討) AWSアカウント間のS3, DynamoDBデータ移行計画の記録(データ完全性検証方法の検討) AWSアカウント間のDynamoDBデータ移行計画の記録(計画の実行と想定外の事象) 今回は、実施時に発生した事象についての原因の説明と回避について記載します。 発生した事象について おさらいになります。前回発生した事象から。 取り込みの Producer 及び転送用の Worker が想定以上に働いておらず、転送対象のテーブルの Write Capacity Unit が想定の 1/5 程度で頭打ちになってしまってい
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
今回は、追加購入して2枚になったソーラーパネルでポータブル電源を充電する際に、直列に繋ぐか、並列に繋ぐか、それぞれのメリット・デメリットや注意点などを忘備録的にまとめてみます。 電気料金高いですよね。政府から節電要請なんてされなくても、こう料金が高いといやが上にも「節電」意識が高まります。というか節電というより出費を抑えたい気持ち…が正解かもしれません。 今回は、貯めていたポイントでソーラーパネルを追加したので、発電能力はアップしたのですが、ポータブル電源の充電の際には「直列」と「並列」のつなぎ方があって、それぞれにメリット・デメリットがあり、さらに並列接続時には注意すべき点もあるようなので、自身の学習&忘備のために記事化しておこうと思います。 先日、日ごろ貯めている某ポイントが3万ポイントを超えたので、たまたま対象品にあったソーラーパネルに交換しました。たまたま、そのソーラーパネルが、自
※ 本記事ではざっくりとした理解を目的とするため、スレッドとプロセスとコア、非同期処理と並列処理と並行処理の違いについて詳細には取り扱いません。気になる方は下記の記事などをご参考ください。 async スレッド数もコア数も1 だから並列処理じゃなくない? というツッコミは正解です。正確には並列処理ではなくて「非同期処理」といいます。フロントエンドのJavascriptから始めた方にはなじみが深いかもしれませんが、「非同期処理」と「並列処理」は全く違う概念なのでご注意ください。 処理の概要としては、最初に複数のリクエストを投げておいて、レスポンスが全部帰ってくるまで待ち、応答が揃ってから処理を再開します。 これにより、応答に 3~7秒(平均5秒)かかるスクレイピングを100回行う場合、同期処理なら500秒程度かかるところ、asyncを使った非同期処理なら7,8秒程度で実行できます。 (外部と
現状 Vitest が Jest など他のテスティングフレームワークに比べて遅くなる場合があることがわかっています。 (確実に遅くなるとはいえない。が、私自身もテストの速度が遅くなったことを経験しています。) また Vitest を実行する場合、--single-threadオプションをつけると速くなるということもわかっています。 (0.29.0以前は --no-threads) 公式 Docs にも最大3倍速くなることが記載されています。 WARNING This option is different from Jest's --runInBand. Vitest uses workers not only for running tests in parallel, but also to provide isolation. By disabling this option, yo
本稿では、Node.jsのWorker Threadsとその基本的な使い方について説明します。 本稿で知れること Worker Threadsの概要 Worker Threadsとは何か? それが解決してくれる問題は何か? worker_threadsモジュールの基本的な使い方 スレッド起動時にデータを渡すにはどうしたらいいか? 3秒かかる処理を、並列処理で1秒に短縮する方法。 Worker Threadsとは? CPUがボトルネックになる処理を、別スレッドに負荷分散し、効率的に処理する仕組み。 マルチプロセスではなく、シングルプロセス+マルチスレッドのいわゆる「本物のスレッド」です。 Worker Threadsが解決する問題 Node.jsはシングルプロセス、シングルスレッド。 シングルプロセス、シングルスレッドは、シンプルさという利点がある。 一方で、CPUに高い負荷がかかる処理は、
はじめに Promiseの基本とthen()を使ったメソッドチェーンの使い方で、以下を中心にまとめています。 複数の非同期処理を順番に実行したい(直列)、同時に実行したい(並列) Promiseの直列処理で、複数の値を受け取りたい then()を使ったメソッドチェーンで、関数の呼び出しに引数を渡したい これからPromiseを使いたい人の参考になれば幸いです。 Promiseとは 非同期処理の結果を、成功(resolve) または、失敗(reject)で返すオブジェクトです。 Promiseを使用すると、以下のような非同期処理を簡潔に書けます。 非同期処理の成功、失敗の処理を分岐する。 複数の非同期処理を順番に実行したり、並行して実行する。(直列・並列) Promiseの基本 new Promiseでインスタンスを生成して使用します。 Promiseの引数には関数を指定し、その関数内に実行
この記事はBASE Advent Calendar 2019の9日目の記事です。 devblog.thebase.in はじめまして。BASE株式会社のtatsuと申します。 最近、業務にて guzzle を使う機会がありました。結論から述べますと guzzle のみで実現することは出来ず Amazon sqs を併用するという形で落ち着いたのですが、いくつか知見を得ることも出来たのでその事について書きたいと思います。 主に guzzle/Pool と guzzle/RetryMiddleware の話になります。 最初の壁:ResponseがどのRequestの結果なのか分からん まず並列処理を実装しました。実際のものとは違いますが流れは一緒。 $urls = [ 'https://example_base.in/1', 'https://example_base.in/2', ]; $
いきなり本題というか、一番言いたいことを書くと、まず テストの fork の設定によってぜんぜん違う。 という点があまり知られていない気がします。 *1 というか、自分も今回調べるまで、微妙に古い知識のままで完璧に知らなかったので、今一度理解した現時点での詳細を今書いています。 sbtにおいて、テストがどう並列化されるか?に関して、関係するというか、今回話すのは、以下の点です Test / parallelExecutionというkey Test / fork が true か falseか concurrentRestrictionsというkey testForkedParallelというkey また、今から話すのはsbt 1.3.8時点の情報です。 さらに前提として、マシンのCPUのコア数によって挙動が異なる可能性がありますが、ひとまずそれなりに十分にコア数がある、として話を進めます。
1年付き合って見て思ったこと。 Lambdaは毎年たくさん機能アップデートがあるけど、やっぱりLambdaの醍醐味はそのシンプルさだと思います。シンプルに使えるように、Lambdaだけでシステムやロジック設計をするのではなくて、AWSのビルディングブロックの組み合わせで適材適所で活かしあった方が良いなと思う1年でした。 Provisioned Concurrencyによって、より多くのワークロードでLambdaが利用された1年になりましたが、それ以上にProvisioned Concurrencyを利用しなくても、そのまま素で自動的にスケールしてくれるLambdaの良さを再確認した1年でもありました。 この記事について 執筆時はre:Invent 2020の前日です。 ですので、re:Invent2020の内容は一切含みません。 そしてProvisioned Concurrencyは201
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
この記事は GMOアドマーケティング Advent Calendar 2022 13日目の記事です。 GMOアドマーケティングのT.Nです。 今回はJava 19でIncubatorの機能として追加されたStructured Concurrencyを試した内容をまとめました。 ブログを書く上で、以下のページを参考にしました。 https://openjdk.org/jeps/428 https://openjdk.org/jeps/437 Incubatorの機能なので、今後仕様が変わる可能性はあります。 Structured Concurrencyについて Structured Concurrencyは、 マルチスレッドプログラミングをシンプルにするために追加された機能です。 異なるスレッドで実行される複数のタスクを一つのユニットとして扱うことで、 エラーハンドリングなどを容易にします。
この記事では、並列処理に関する入門的知識を解説する。 さらに、Rubyで開発されている新しい並列実行単位Ractorにも言及する。 まず、この話題をする上で混同しがちな用語についてまとめる。 並列処理(parallel)と並行処理(concurrent)について 並列処理 では、ある瞬間に複数の処理が同時に走る。 並行処理 では、複数の処理を時分割で順に処理する。並列処理とは異なり、ある瞬間に同時に走る処理は1つだけ。 ある複数の処理が実行されているタイミングを時系列で示すと、下図のようなイメージになる。 (青い線がある部分のみ処理が実行される) この記事では並列処理の動作について扱うが、並列処理のコードを書いても結局並行処理のように動いている場合もあることには注意。 (例えば、1コアのCPUでは2つ以上の処理を並列に動作させることはできない、など。) この辺りはOSやVMなどが良い感じに
REST API の呼び出し結果を、集中的に何度も使いたいような場合、API のレスポンスをキャッシュするのではなく、Promise をキャッシュすることで、API が 1 回だけ呼ばれることを保証できます。 何もキャッシュしない場合 まず最初に、何もキャッシュしない場合を見てみます。 import axios from 'axios' class App { /** * API に GET リクエストを送信するメソッド。何もキャッシュしないバージョンです。 */ async request(url) { return await axios.get(url) } /** * API を使ってなにかするメソッドです。 */ async doSomethingWithAPI(url, index) { const result = await this.request(url) consol
基本的には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
We are Higher Order Company, A tech startup with the goal of building the inevitable massively parallel future of computers. We believe Interaction Nets are a powerful model of computation that will give birth to massively parallel runtimes and processors. To pave the way forward, we built: HVMKindKindelia Join us on:
WWDC 2021 が始まりました。 今年は Swift 5.5 で並行処理の大型アップデートが予定 されており、長年待ち望まれていた async/await に加えて、さらに先進的な Structured Concurrency や Actor なども導入されます。そのため、 WWDC 2021 では並行処理関連のセッションが多数予定されています。 そこで、セッション一覧から並行処理関連のものを探して一覧にしてみました。内容はまだわかりませんが、個人的に重要度が高そうだと思う順に並べてみました。各セッション下部のリンクは内容に関係しそうな Proposal です。 (感想) は実際にそのセッションを見た感想です。 もし抜け漏れなどあればコメント下さい🙇 What‘s new in Swift これは並行処理についてのセッションではないですが、 Swift 5.5 での新機能の大きな割合
Go、Python、Kotlin、Rust、TypeScript の5つの言語について「並列処理、並行処理の手法」というテーマに絞り解説する「並列処理をGo/Rust/Kotlin/Python/JSで解説!思想の違いを体感しよう」。Go編では森下篤氏が登壇。Goの並列・並行処理のやり方を紹介します。 Goの並列・並行処理 森下篤氏(以下、森下):私のところでは、Golangについて説明します。弊社は会社名もGOなので非常にわかりにくいのですが、基本的には大文字で「GO」と書くと会社を示すことが多いです。(スライドを示して)小文字の「Go」やスライドのアイコンを使った時には、言語のGoと思ってもらえると助かります。 まず、Goでの並列・並行処理について話します。独自の軽量スレッドであるGoルーチンというものがあって、Goルーチン同士の同期・非同期通信の仕組みであるチャネルが構文に含まれてい
Bernard Kolobara Posted on Nov 28, 2020 • Updated on Feb 17, 2021 • Originally published at lunatic.solutions It's not a secret that I'm a big fan of Elixir, so when I started doing Rust development I tried to bring some ideas from Elixir to the world of Rust. This post describes some of the tools I'm building to bring the power of Elixir to Rust. What makes Elixir so great? It's hard to just pick
近年ではIoTでエッジ/フォグ・コンピューティングを行う事例が増えてきており,IoTにも計算パワーが求められるようになってきている.そこで,近年,アメリカを中心に注目を集めている開発プラットフォームNervesと,我々が研究開発を進めている並列処理ネイティブコード生成系である Pelemay Super-Parallelism を組合わせて,エッジ/フォグ・コンピューティングに用いることを提案する.現状の Pelemay は Clang / GCC を使って単一コアのSIMD命令を含むネイティブコードを生成する.本研究により,Raspberry Pi 3 Model B+ (ARM Cortex-A53ベース) と Raspberri Pi 4 Model B (ARM Cortex-A72ベース)の Nerves システム上と,Jetson Nano (ARM Cortex-A57ベース
parallelを使うとKenrel#forkやThreadを駆使するのと比べて簡単に並列処理を書くことができます。parallelは拙作のBestGems.orgによると、合計ダウンロード数で151位、デイリーダウンロード数は100位前後で、現時点で非常にメジャーなGemとなっています。 この記事ではparallelの基本的な使い方と、実際に使ってみて感じた注意点をTipsとして整理したいと思います。 parallelはREADME.mdが親切に書かれています。 加えて主要な部分は500行程度の小さなGemです。 利用する場合は公式のドキュメントとソースコードを確認されることをおすすめします。 前提ソフトウェア ソフトウェア バージョン 備考 ruby 2.5.1 - parallel 1.12.1 - rails 5.0 - 使い方 インストール gem install paralle
イントロ 日立製作所 研究開発グループの中田です。普段、エッジコンピューティングや分散システムの研究開発、またシステムアーキテクトをやっています。 公私ともにQiitaは初投稿です。 今回は、Rayを紹介します。 Rayは、分散処理を含むアプリを開発するためのライブラリおよび実行環境です。まだ日本では情報が少ないのですが、海外では有名企業や大学がこぞって活用しており、かなりホットなライブラリだと思います。今年2020年10月1日にバージョン1.0がリリースされました。また同じタイミングにRay Summitが開催され、50本程のセッションで多数の活用事例が紹介されました。 Rayは、通常の手続き型言語を容易に分散処理化できるものであり、データ分析やエッジ/IoTの分野で有用に思えるので、日本でも広まって欲しいと思っている次第です。 本記事では、そもそもここでの分散処理とは何か、から始めて、
この記事の目的 現代ハードウェアの計算性能を評価する尺度であるメモリ律速の概念とルーフラインモデルについて理解を深めること。 対象読者はメモリバンド幅やOPSなどの概念があまりわかっていない人です。例えば本記事を通し、あるアルゴリズムが速度が十分に出ない時、それがハードウェアのどの性能(メモリか演算)に律速されてるかイメージできるようになるのが目標です。 思うままに書いていたら肝心のメモリの話まで行きませんでした。そのため前編はクロックや演算(OPS)についてです。 TPUのルーフラインモデル この図はTPUの論文に出てくるRoofline modelです。この図が意味するところを理解するのが本記事の最終目標となります。 ハードウェアの速度をどう評価すればいいか? ベンチマークによる評価 ハードウェア速度の評価は昔から大きな問題でした。わかりやすい評価指標にある代表的なアルゴリズム数種類で
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く