並び順

ブックマーク数

期間指定

  • から
  • まで

321 - 360 件 / 3336件

新着順 人気順

concurrentの検索結果321 - 360 件 / 3336件

  • koshigoe.jp

    • 幸せな非同期処理ライフを満喫するための基礎から応用まで - Qiita

      クライアントアプリにとって、マルチスレッドプログラミングは避けては通れない重要な概念です。しかし、気をつけないとハマるポイントも多く、初めてクライアントアプリを学ぶ人たちからすると、複雑で難解な取っつきづらいものでもあります。ここでは、スレッドの基本から、効率的な使い方、また複雑化しやすいポイントをシンプルに実装するためのノウハウを見ていきます。 TL;DR スレッドの取り扱い方を知る Threadをそのまま使わず、AsyncTaskやIntentService、時にThreadPoolExecutorを使ってスレッドの使い方を効率化する。 複雑な処理フローをシンプルに扱うためのフレームワークを導入する PromiseやRxAndroidなどで、複雑化しやすいポイントを整理する。 スレッドの基本 スレッドといえば、ThreadクラスやRunnableクラスがベースにあります。以下のようにす

        幸せな非同期処理ライフを満喫するための基礎から応用まで - Qiita
      • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

        はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

          はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
        • volatileで最適化を抑制する - 職業としてのプログラミング

          C言語やC++,Javaにはvolatileという修飾子があります。組み込み系ソフトウェアやマルチスレッドのアプリケーションを書いている方にとっては、なじみ深い存在ですが、そうでない方にはあまり縁がないのかもしれません。しかし、volatileの使い方や存在意義を知らないままコーディングを行うと、思わぬバグを引き起こす場合があります。今回は、そのvolatileキーワードについて簡単に説明したいと思います。 volatileは初期のCであるK&Rには含まれていませんでしたが、ANSI C(C89)以降のC標準規格にはconstと一緒に含まれるようになりました(constとvolatileをあわせてcv修飾子と呼ぶこともあります)。一般的なCなら必ず備えている修飾子です。 volatile修飾子の意味ですが、「プログラミング言語C ANSI規格準拠」によると、 volatileの目的は,黙っ

          • C#での、正しいマルチスレッドプログラムの書き方を求めて - 情報科学屋さんを目指す人のメモ

            タグ Windows  /  インストール  /  Linux  /  設定  /  エラー  /  Java  /  Eclipse  /  AutoHotkey  /  TeX  /  C#  /  VisualStudio2008  /  対策  /  Subversion  /  LaTeX  /  Vista  /  方法  /  CentOS  /  Android  /  Microsoft  /  Windows7  /  Office  /  バージョン管理  /  プログラミング  /  eclipse  /  PowerPoint  /  SSH  /  Ubuntu  /  WindowsVista  /  コマンド  /  ショートカット  /  .NET  /  Desire  /  VisualStudio  /  便利  /  P2P  /  Unix  /

            • Racket

              #lang racket/gui (define my-language 'English) (define translations #hash([Chinese . "你好 世界"] [English . "Hello world"] [French . "Bonjour le monde"] [German . "Hallo Welt"] [Greek . "Γειά σου, κόσμε"] [Portuguese . "Olá mundo"] [Spanish . "Hola mundo"] [Thai . "สวัสดีชาวโลก"] [Turkish . "Merhaba Dünya"])) (define my-hello-world (hash-ref translations my-language "hello world")) (message-box "" my

              • Visualizing Concurrency in Go · divan's blog

                If you prefer video over blog posts, here is my talk on this at GopherCon 2016: https://www.youtube.com/watch?v=KyuFeiG3Y60 One of the strongest sides of Go programming language is a built-in concurrency based on Tony Hoare’s CSP paper. Go is designed with concurrency in mind and allows us to build complex concurrent pipelines. But have you ever wondered - how various concurrency patterns look lik

                • アムダールの法則 - Wikipedia

                  複数のプロセッサを使って並列計算してプログラムの高速化を図る場合、そのプログラムの逐次的部分は、制限を受ける。例えば、仮にプログラムの95%を並列化できたとしても、残りの部分である5%は並列処理ができないため、どれだけプロセッサ数を増やしたとしても、図で示したように20倍以上には高速化しない。 アムダールの法則(アムダールのほうそく、英語: Amdahl's law)は、ある計算機システムとその対象とする計算についてのモデルにおいて、その計算機の並列度を上げた場合に、並列化できない部分の存在、特にその割合が「ボトルネック」となることを示した法則である。コンピュータ・アーキテクトのジーン・アムダールが主張したものであり、アムダールの主張(アムダールのしゅちょう、英語: Amdahl's argument)という呼称もある[1]。 複数のプロセッサを使い並列計算によってプログラムの高速化を図る

                    アムダールの法則 - Wikipedia
                  • #Free:HD.Watch! Rick and Morty Season 3 Episode 8 Online streaming | 01.org

                    Using Intel.com Search You can easily search the entire Intel.com site in several ways. Brand Name: Core i9 Document Number: 123456 Code Name: Emerald Rapids Special Operators: “Ice Lake”, Ice AND Lake, Ice OR Lake, Ice* Quick Links You can also try the quick links below to see results for most popular searches. Product Information Support Drivers & Software

                      #Free:HD.Watch! Rick and Morty Season 3 Episode 8 Online streaming | 01.org
                    • JavaScriptによるマルチスレッドの実現‐Concurrent.Threadの裏側

                      function f ( ) { do_something(); do_another(); do_one_more(); } このプログラムでは順番に3つの関数を呼び出していますが、各関数呼び出しの間でいったんスレッドの実行権を他のJavaScriptコードに渡したいとします。これは次のように、各関数呼び出しをそれぞれ別の関数に分けて、間にsetTimeoutを挿むようにプログラムを書き換えることで実現できます。 function f ( ) { do_something(); setTimeout(f1, 1);  // 1ミリ秒後にf1を呼び出す } function f1 ( ) { do_another(); setTimeout(f2, 1); } function f2 ( ) { do_one_more(); } こうして書き換えた関数fを、 f(); f(); のようにし

                        JavaScriptによるマルチスレッドの実現‐Concurrent.Threadの裏側
                      • 並列1000コネクションに耐える! Ruby のイベント駆動ライブラリ Rev と EventMachine の HTTPクライアント : DSAS開発者の部屋

                        並列1000コネクションに耐える! Ruby のイベント駆動ライブラリ Rev と EventMachine の HTTPクライアント こんにちは、takada-at です。 Rubyのイベント駆動型ネットワークプログラミングフレームワーク Rev と EventMachine で HTTPクライアントを動かしてみました。 イベント駆動型ネットワークプログラミングフレームワークとは何か説明しだすと難しいですが、一言で言うと、以下のようになります。 # ふつうのフロー駆動型プログラム Net::HTTP.start(host, port){|http| res = http.get(path) #この処理が終わってから } puts "done" #この次の処理が実行される # イベント駆動型プログラム client = Rev::HttpClient::connect(host, port

                          並列1000コネクションに耐える! Ruby のイベント駆動ライブラリ Rev と EventMachine の HTTPクライアント : DSAS開発者の部屋
                        • golang の並列処理を Ruby と比較しながら学ぶ

                          一ヶ月ほど前に社内のインフラ共有会でタイトルの話をしました。記録の ために記事を書いておきます。 Gist に置いてある ので、コードは git clone で取得可能です。 $ git clone https://gist.github.com/c0a4234a5264c89655c40adcf7c27cb2.git Ruby# 例えば Ruby で 30 個の処理をするコードがあったとします。こんな素朴 なコードです。それぞれ 3 秒かかる処理が 30 あるので、とても遅いです。 Thread を使って 5 並列にしました。明らかに速くなりました。 ついでにそれぞれの結果(というほどのものではありませんが)を results に代入し、最後にまとめて表示しました。 results は共有リソースになるので、Thread::Mutex#synchronize でロッ クをかけて安全に書き

                          • PFIセミナー 2013/02/28 「プログラミング言語の今」

                            Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.kiki utagawa

                              PFIセミナー 2013/02/28 「プログラミング言語の今」
                            • parallel と concurrent、並列と並行の違い - 本当は怖いHPC

                              2017/01/10 誤字脱字を修正しました 2016/11/07 内容を修正しました 2010/09/17 文章を修正しました 一般的に、parallelは並列、concurrentは並行と訳されます。検索してもずばり書かれた物がなかったので、僕なりの理解を書いてみます。 (注:言葉の定義の問題なので、複数の流儀があり得ます。端的に言えば、いわゆるCPUのSIMD命令を「並行」と見なすかどうかに違いが現れます) 参考リンク: http://d.hatena.ne.jp/NyaRuRu/20060129/p2 http://d.hatena.ne.jp/muimy/20070322/1174526368 一番妥当(だと思う)定義 一言で言えば、 Concurrent(並行)は「複数の動作が、論理的に、順不同もしくは同時に起こりうる」こと Parallel(並列)は、「複数の動作が、物理的に

                                parallel と concurrent、並列と並行の違い - 本当は怖いHPC
                              • OOエンジニアの輪! ~ 第 38 回 笹田 耕一さんの巻 ~ | オブジェクトの広場

                                現在のお仕事について ---最初に、今どういうお仕事をやっておられるか、お話していただけますか? 東京大学大学院の情報理工学系研究科創造情報学専攻で特任助教をしています。ここ、情報理工学系研究科秋葉原拠点は、創造情報学という最近できた専攻のラボになっているんですが、主にここに常駐しています。 そこで具体的に何をしているかといいますと、文科省の「先導的 IT スペシャリスト育成推進プログラム」というプロジェクトに従事しています。産業界から「きちんとわかる IT 技術者が少ないので大学もなんとかしてくれ」という要請があったらしく、文科省の公募により、数拠点が選ばれました。 で、東大と東工大と NII(国立情報学研究所)の 3 つの研究機関が協力してそのうちのひとつ「情報理工実践プログラム」を行っているんですが、私はそこに雇われている、というわけです。 この拠点では、実際にソフトウェアを作ること

                                  OOエンジニアの輪! ~ 第 38 回 笹田 耕一さんの巻 ~ | オブジェクトの広場
                                • 正しいベンチマークをするための10のポイント

                                  世の中ではたくさんの人が独自にベンチマークを行ない、独自に情報発信がされています。そのベンチマークの中には、非常に参考になるものもあれば、現実性に大きく欠けるものもあります。競合他社が、ライバル社の製品にとって不利な条件でベンチマークを行い、それを発信することも日常的に行われています。ベンチマークの結果を鵜呑みにすることは危険で、結果の意味を判断するスキルを持つことが重要です。これはプロジェクトにおいて負荷テストを行う場合にも重要です。負荷テストの条件設定が正しいかどうかを判断できるようになるためです。 ここでは、私がDBサーバのベンチマーク/負荷テストを行ったり結果を読んだりする上で、心がけているポイントを10個ほど紹介したいと思います。 ■ハードウェアに関する4つのポイント 1. ハードウェアのスペックと設定を注視する ハードウェア構成によってベンチマーク結果は劇的に変わるので、言わず

                                  • 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で簡単に並列実行する | おそらくはそれさえも平凡な日々
                                    • Golangで作ったhttpdの接続数を制限してみよう

                                      こんにちは。斎藤です。 ここ1〜2年、私は仕事でGolangを書くことが増えています。きっかけは、ITインフラをお預かりする中で、お客様のサーバにツールを置く場合でも1つのバイナリさえ置けば良いという手軽さからだったのですが、最近はScalaと並び手軽に並列処理が書けるプログラミング言語として重宝しています。 さて、今回はGolangで作ったhttpdの接続数をLimitListenerを利用して接続数の制限をしてみようというお話です。以下に紹介するお話は、Githubのリポジトリ "github.com/koemu/go-http-max-connections-demo" にデモプログラムを保存しています。Golangのビルド環境がある方は、実際にビルドしながらお試しいただければと思います。 ※Golang 1.5.1でビルドする前提で説明しています モティベーション 仕事でとあるAP

                                        Golangで作ったhttpdの接続数を制限してみよう
                                      • さあ、Yコンビネータ(不動点演算子)を使おう! - よくわかりません

                                        前回、おとうさんにもわかるYコンビネータ!(絵解き解説編) - よくわかりませんというエントリで、Yコンビネータ(不動点演算子)と再帰の絵解き解説をしました。 Yコンビネータ自身は、結局のところ再帰を産み出してくれるだけです。関数(正確にはλという単純な文字列変換ルール)だけで出来て、プログラミングに関するいろんな原理の研究を可能にするのが凄い訳です。その辺のさわりを、きしださんが解説されています。しかし、単なる再帰なら、実際のプログラミングではYコンビネータなんて使わなくても出来ます。 じゃあ、Yコンビネータとか不動点とかは、偉い学者さんとかが研究に使えばいいもので、普通のプログラマには何の意味もないモノなのでしょうか? というわけで、今回はポジティブに、Yコンビネータや不動点で出てくる考え方を、理論だけじゃなく、実際のプログラミングに応用する例を見てみましょう。 今回、プログラムの例を

                                        • コマンドを並列に実行するGNU parallelがとても便利 - りんごがでている

                                          最近のコンピュータは複数のCPUコアを持っているので並列にコマンドを実行することができます。 たくさんの同じようなファイルに同じ処理を実行することは、私のやっているバイオインフォマティクスではよくあります。 しかし自分で並列に実行するスクリプトを書くことはそれほど簡単ではなく、ログや実行結果の確認など煩雑な処理を書かなければいけません。 この記事では、そうした処理を簡単にするGNU parallelというツールを紹介します。 GNU parallel UNIX系のOSではインストールはとても簡単です。MacでしたらHomebrewを使って、Linuxでは各ディストリビューションのパッケージマネージャからインストールできます。 詳しくはGNU parallelのウェブページを参照して下さい(http://www.gnu.org/software/parallel/)。 Homebrew: b

                                            コマンドを並列に実行するGNU parallelがとても便利 - りんごがでている
                                          • MASDA » 非同期処理いろいろ

                                            Strict Standards: Declaration of Walker_Page::start_lvl() should be compatible with Walker::start_lvl(&$output) in /home/sites/heteml/users/m/e/t/metaphor/web/masuda/blog/wp-includes/classes.php on line 576 Strict Standards: Declaration of Walker_Page::end_lvl() should be compatible with Walker::end_lvl(&$output) in /home/sites/heteml/users/m/e/t/metaphor/web/masuda/blog/wp-includes/classes.php on

                                            • マルチコア時代のLock-free入門

                                              Please select the category that most closely reflects your concern about the presentation, so that we can review it and determine whether it violates our Terms of Use or isn't appropriate for all viewers.

                                              • GoのChannelを使いこなせるようになるための手引 - Qiita

                                                Go使いたくなる理由の一つに、マルチスレッドプログラミング的なものを高速な言語で安全に実装したいというのがある。Goにおいてそれを支えるのが、自前で実装した軽量スレッドといえるgoルーチンと、mutexなどのロックの代わりに使えるChannelという概念だ。 実際に実装するときに、Goルーチンは難しくないが、Channelを使うのは割と知識と経験が必要なのでここでは、Channelについてすこし詳しく書いてみる。 Message Passing まずは理論から。 Goのチャネルなどのロックを使わない方法の並行処理はMessage Passingと呼ばれている。 以下の英語版Wikipediaにあるように数学的な理論にもなっているしっかりした枠組み。 ErlangのActor Modelなどもこの仲間。GoのチャネルとActor Modelは、実は、同等の概念で表現方法が違うだけらしい。 (

                                                  GoのChannelを使いこなせるようになるための手引 - Qiita
                                                • Macのシェア拡大の起爆剤となるか--正式版の登場が迫るParallels - CNET Japan

                                                  Macintosh上でMicrosoftのOS「Windows」を使用できるようにするソフトウェアを手がける新興企業Parallelsは、米国時間6月15日、「Parallels Desktop for Mac」の製品版を発売した。 Apple Computerは4月、Mac上でWindowsが利用できるソフトウェア「Boot Camp」のパブリックベータ版を発表し話題になった。しかし、Boot Campでは一度に立ち上げられるOSは1種類のみで、WindowsとMac OSを同時に利用することはできない。 ほぼ同じ頃にParallelsは、仮想化技術によりMacのアプリケーションと同時にWindowsプログラムも動作させられるソフトウェア、Parallels Desktopのテストを開始した。Parallels Desktopでは、WindowsプログラムはMac OS上の別ウィンドウに

                                                    Macのシェア拡大の起爆剤となるか--正式版の登場が迫るParallels - CNET Japan
                                                  • Golangの新しいGCアルゴリズム Transaction Oriented Collector(TOC)

                                                    http://golang.org/s/gctoc Goの新しいGCのProposalが出た.まだProposal段階であり具体的な実装はないが簡単にどのようなものであるかをまとめておく. GoのGCはGo1.5において単純なStop The World(STW)からConcurrent Mark & Sweepへと変更され大きな改善があった(詳しくは“GolangのGCを追う”に書いた).先の記事に書いたようにGo1.5におけるGCの改善は主にレイテンシ(最大停止時間)に重きが置かれいた.数値目標として10msが掲げられGo1.6においては大きなヒープサイズ(500GB)においてそれを達成していた. GCの評価項目はレイテンシのみではない.スループットやヒープの使用効率(断片化の対処)なども重要である.Go1.6までのGCではそれらについて大きく言及されていなかった(と思う).例えばスル

                                                    • ErlangとGolangを比較してみる

                                                      よくこの2つの言語を比較する人がいるように感じる。 両方ともサーバープログラム用途で用いられる言語なので、分からなくもないのだが、この2つの言語は似て非なる物だ。 プロセス周りに重点を置いて違いについて自分なりに纏めてみた。 両方とも触れてから1年と経っていないので、間違いがあれば指摘をもらえると嬉しい。 主な違い Erlang Golang

                                                        ErlangとGolangを比較してみる
                                                      • Haskellによる並列・並行プログラミング

                                                        並列・並行プログラミングはプログラマの重要な関心事であり、常に注目を集めている話題です。これまで、関数型言語は並列・並行プログラミングに有利であると言われてきましたが、それを説明する書籍はありませんでした。本書では、純粋関数型言語Haskellが提供する並列・並行プログラミングの機能を俯瞰し、実践的な問題を解いていきます。その根底にある考え方は、関数プログラミングの核心であるモジュラリティです。また本書では、実際の問題を解決するときに陥りがちな落とし穴や、高い性能を出すためのtipsなどをまとめています。 正誤表 ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認

                                                          Haskellによる並列・並行プログラミング
                                                        • Go でロックする - Qiita

                                                          はじめに この記事はGo Advent Calendar 2016 の17日目の記事です。 並行処理をする時にはロックが重要になります。 GoではchannelとMutexという仕組みを提供しています。 この記事では色々なロックを作りたいと思います。 tl;dr channelでロックを作ることは有意義です。 ただ、Mutexのほうが良いこともあります。 良い方法を選びましょう ロック無し ロックの意味を確かめるためにも、まずはロック無しのコードから始めます。 func main() { counter := 0 for i := 0; i < 1000; i++ { go func() { counter++ fmt.Print("*") }() } time.Sleep(3 * time.Second) fmt.Printf("\n%d\n", counter) } この関数を実行する

                                                            Go でロックする - Qiita
                                                          • スケーラブル tail -f | grep on AWS - KAYAC engineers' blog

                                                            こんにちは。組長こと @fujiwara (id:sfujiwara) です。 早速ですが皆さん、ログは見ていますか? 当然見ていますよね。tail -f で追いかけるとか大好きですよね。という前提で話を進めましょう。 この記事は Tech KAYAC Advent Calendar 2016 の24日目の記事です。 TL;DR 多種多様なホストから発生するログの末尾を tail -f で追いかけたい fluentd + ローカルファイルで行うのはちょっと面倒 Amazon Kinesis + Lambda を使ってスケーラブルな仕組みを考えてみた kinesis-tailf というツールも作った 既存の仕組みと問題点 techblog.kayac.com 弊社の Lobi とソーシャルゲームでは、この記事で紹介されたような Fluentd を活用したログ集約の仕組みを整備しています。この

                                                              スケーラブル tail -f | grep on AWS - KAYAC engineers' blog
                                                            • Flow.js

                                                              非同期プログラミングを驚きのシンプルさに ver 1.0.1 and more. http://uupaa.hatenablog.com/entry/2013/03/12/185555 http://uupaa.hatenablog.com/entry/2013/03/14/131556

                                                                Flow.js
                                                              • Pythonのジェネレータ、コルーチン、ネイティブコルーチン、そしてasync/await | POSTD

                                                                (訳注:2016/3/9、いただいたフィードバックを元に記事を修正いたしました。) 注意: この記事で書かれている機能は、大部分がPython 3.4で導入されたものです。ネイティブコルーチンとasync/await構文はPython 3.5でサポートされました。そのため、本記事に記載されているコードを試す場合はPython 3.5の利用をお勧めします。 ジェネレータは値を 生成する 関数です。普通、関数は return で値を返したあと、その下層のスコープは破棄します。関数を再度呼び出す場合、その関数はゼロから起動されることになります。つまり1回限りの実行となります。しかしジェネレータ関数は値を yield で返し、関数の実行を一時停止します。その後、関数を呼び出したスコープにコントロールが移ります。関数を再び呼び出して次の値を(存在すれば)得たい時は、実行を再開することができます。では

                                                                  Pythonのジェネレータ、コルーチン、ネイティブコルーチン、そしてasync/await | POSTD
                                                                • アマゾン、ウィザードだけで使えるHadoopサービス開始 - @IT

                                                                  2009/04/02 米アマゾンの子会社、Amazon Web Services(AWS)は4月2日、多数のOSインスタンスを起動して大規模分散処理を行える「Amazon Elastic MapReduce」のベータサービスを開始した。 Amazon Elastic MapReduceは、オープンソースの分散処理フレームワークApache Hadoop 0.18.3を利用したサービスで、Webブラウザベースの管理コンソールやコマンドラインツール、APIを使ってジョブを投入することで、大量データの解析や計算量の多い科学計算、統計処理が可能。大量のログ処理や機械学習、金融計算、データマイニング、Webサイトのインデクシング処理などに使えるという。 ジョブを処理するノードは、従来からAWSが提供しているAmazon EC2で稼働し、データの入出力にはAmazon S3が使える。データの入力にはイ

                                                                  • そのファイル、安全に更新できていますか?(アトミックなファイル操作:前編)

                                                                    ハートビーツ最年長エンジニアの滝澤です。以前、弊社CTOにシニアおっさんエンジニアから若手エンジニアに向けて何か書いてくれと言われた気がしたので、アトミック(atomic)なファイル操作について3編に分けて紹介します。この内容は弊社の社内勉強会で話した内容をまとめ直したものです。 そのファイル、安全に更新できていますか?(アトミックなファイル操作:前編)←今回 そのファイル、安全に作成できていますか?(アトミックなファイル操作:中編) そのファイル、安全にロックできていますか?(アトミックなファイル操作:後編) 今回は「みなさん、安全にファイルの更新ができていますか?」ということについて、考えてみましょう。 あなたはあるサーバ上のファイルの更新を依頼され、もらったファイルをサーバ上でコピーして上書きしました。しばらくして、データに異常が発生したので調べて欲しいと言われました。さて、何が起き

                                                                      そのファイル、安全に更新できていますか?(アトミックなファイル操作:前編)
                                                                    • 第11回 クロージャによる超軽量並行プロセスの簡単実装法

                                                                      最近,ネットの一部で「Erlang」(発音はアーランまたはエアラン)というプログラミング言語が流行している(参考リンク)。Erlangはスウェーデンの通信機器メーカーであるエリクソンにて開発された言語で,エリクソン内部や通信業界はもちろん,Twitter(関連記事)などのオンライン・サービスでも採用されているという。 Erlangの特徴は,複数のプロセスが通信をしながら計算をする「並行プログラミング」を,言語の機能として強力にサポートしていることだ。C言語などの逐次プログラミング言語は,プロセスや通信の機能を内蔵しておらず,こうした機能をオペレーティング・システムに「外注」している。しかし,そのような外付けの仕組みは,メモリー消費量や速度,開発効率などの点でオーバーへッドが大きい。Erlangのような並行プログラミング言語では,プロセスや通信といった機能をプリミティブとして実装することによ

                                                                        第11回 クロージャによる超軽量並行プロセスの簡単実装法
                                                                      • JavaScript のスレッド並列実行環境

                                                                        これは Chromium Browser アドベントカレンダーの十日目の記事です。本記事では Chromium における JavaScript のスレッド並列実行環境について仕様・実装・API の面から包括的に紹介します。ブラウザの内部実装に興味がある人を対象に、各機能の使い方ではなく実行モデルに焦点を当てて説明しているため、難易度は高いです。使い方を知りたい人は MDN などの記事を読んでください。この記事をきっかけに実装解読に挑戦してみる人が一人でも増えると幸いです。 本記事を書くにあたり、yuki3 さんに多くのコメントをいただき、議論に付き合っていただきました。ありがとうございました。なお、文責はすべて私 (nhiroki) にあります。誤りや補足、質問などは気軽に GitHub Issue もしくは Twitter へお寄せください。 更新履歴 2018/01/15 Layout

                                                                          JavaScript のスレッド並列実行環境
                                                                        • Goでchannelがcloseしてるかどうか知りたい というアンチパターン

                                                                          そういえば金沢に行って来た話の2〜4日目をかいてる途中で2ヶ月くらい経ったことに気付きましたが、まぁその話はおいておいて今日はGoの話です。 さて、このタイトルを見てGoに詳しく賢明な読者の方々は「あぁまたこの話題だよ、Goでchannelがcloseしてるかどうか知りたいようなパターンはだいたい書いてるアプリの設計とかchannelの使い方が間違ってるんだからやめとけ」と眉をひそめるかもしれません。まぁちょっとまって! オレもそうなんじゃないかなぁという気はしているし、ハマリどころがありそうということはうすうす分かってるけど一応調べて考えてみてもいいじゃないか。 結局の所調べて「こうすればいいね!」ってことは分かったんですが、それも破綻する場合があるので、アンチパターンだなぁと思いつつこの記事を書くことにしました。 まずGoのchannelのナイーブさを再確認する そもそもGoのchan

                                                                            Goでchannelがcloseしてるかどうか知りたい というアンチパターン
                                                                          • リアルタイムなHadoop? 「Real-Time MapReduce」を実現するS4、オープンソースとしてYahoo!が公開 - Publickey

                                                                            米Yahoo!は、大規模データの分散処理を実現するMapReduceをリアルタイムに行うソフトウェア「S4」を、オープンソースとして公開しました。 MapReduceを実行するソフトウェアとして、オープンソースの「Hadoop」がありますが、Hadoopはあらかじめジョブを定義して投入するバッチ処理を前提としていました。 S4は、データをキーとバリューのペアで構成されるストリームデータとして非同期に受け取ることができ、処理結果もキーバリューのペアで構成されたストリームデータとして出力するようになっているとのこと。 この非同期なストリームデータによる入出力が、リアルタイムなMapReduceを実現するフレームワークとしてのS4の特徴といえます。 リアルタイムなMapReduceで何ができる? リアルタイムなMapReduceにはどのような用途が考えられるのでしょうか? S4の公開を表明したY

                                                                              リアルタイムなHadoop? 「Real-Time MapReduce」を実現するS4、オープンソースとしてYahoo!が公開 - Publickey
                                                                            • Promise と async/await の理解度をもう1段階上げる - Qiita

                                                                              はじめに 表題のモチベーションで書き上げた備忘録に加筆・修正したものを記事にしました。 記事を読んで下さった方の Promise, async/await の理解度が 1LV でもアップしてくれたら嬉しく思います。 Promise とは Promise は非同期関数を扱うためのインターフェース Promise は 悲運のピラミッド型コールバック (ネスト地獄)を根本的に解決してくれる thenable と呼ばれる then メソッドを有するオブジェクトを resolve の第一引数に入れることで Promise オブジェクトへ変換することが可能 // thenable を Promise オブジェクトへ変換する const converted = Promise.resolve({ then: (onFulfilled) => onFulfilled('be promise') }) co

                                                                                Promise と async/await の理解度をもう1段階上げる - Qiita
                                                                              • YAPC::Asia 2009 / Asynchronous Programming for (A)synchronous Communication

                                                                                TopicsPlaceHolder SectionTitlePlaceHolder TIME rest time current/total

                                                                                • 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) を入れようと思った話 - クックパッド開発者ブログ