
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? Goroutineハンター、それは逃げ出したgoroutine達を捕まえるため、日夜戦い続けるエンジニア達のことである。Goroutineハンターは本番環境でOOM Killerが発動するたびに呼び出され、逃げ出したすべてのgoroutineを捕まえるまで家にかえることが出来ない。しかし、あなたが書いた何気ないコードによって、今日もまた新しいgorutine達が野に放たれるのであった。 Goroutineリークとの戦い Goを使用してある程度規模のプログラムを書くと、必ず問題になるのがgoroutineのリークである。goで生まれたgo
package main import ( "fmt" "math/rand" "time" "runtime" ) func main() { runtime.GOMAXPROCS(runtime.NumCPU()) rand.Seed(time.Now().UnixNano()) c := boring("boring!") // Function returning a channel. for i := 0; i < 5; i++ { fmt.Printf("You say: %q\n", <-c) } fmt.Println("You're boring: I'm leaving.") } func boring(msg string) <-chan string { c := make(chan string) go func() { // We launch the goro
エキスパートPythonプログラミング改訂2版posted with カエレバMichal Jaworski,Tarek Ziade KADOKAWA 2018-02-26 Amazonで最安値を探す楽天市場で最安値を探すYahooショッピングで最安値を探す 目次 目次 はじめに subprocessによる複数子プロセス処理 concurrent.futuresによるマルチプロセス処理 Queueによる並行プログラミング 最後に 参考資料 MyEnigma Supporters はじめに 元々Pythonは、 そこまで処理速度が早い言語ではないので、 システムの処理速度を最適化したい場合は、 C++などで書き直した方が良いのかもしれませんが、 Pythonシステムをあと少し早くしたい時には、 並行処理プログラミングをしてみると、 効果があるかもしれません。 最近のコンピューターはマルチコア
The C10M Problem is about how on a modern server, you should be able to easily handle 10M concurrent connections with solid throughput and low jitter. Handling that level of traffic generally requires a more specialized approach than is offered by a stock Linux kernel. Using a stock debian-8 image and a Go server you can handle 10M concurrent connections with low throughput and moderate jitter if
Python の concurrent.futures はバージョン 3.2 で追加された並行・並列処理用のパッケージ。 似たようなパッケージにはこれまでにも threading や multiprocessing があったんだけど、これはそれよりも高レベルの API になっている。 デフォルトでスレッド・プロセスプールが使えたり、マルチスレッドとマルチプロセスがほとんどコードを変えずに使い分けられるメリットがある。 下準備 使う Python のバージョンが 3.2 未満のときは PyPI にあるバックポート版のパッケージをインストールする必要がある。 $ pip install futures ただし、今回使う環境は Python 3.5 なので関係ない。 $ python --version Python 3.5.1 $ sw_vers ProductName: Mac OS X P
Readers Writerロックで、並行キューを実装した。 値を返し、例外を投げないpop()も実装しておいた。 実装: shand/concurrent/queue.hpp インタフェース namespace shand { template <class T> // Tは、例外を投げないムーブコンストラクタを持っていること class concurrent_queue { public: concurrent_queue() {} concurrent_queue(const concurrent_queue&) = delete; concurrent_queue& operator=(const concurrent_queue&) = delete; // write access void push(const T& x); void push(T&& x); boost::
golang の特徴と言えば goroutine と channel ですが、その使いどころに悩む人もおられる様です。 goroutine は非同期に実行される処理、channel はその groutine と通信する為の仕組みと考えると分かりやすいです。 package main import ( "fmt" "time" ) func main() { task := make(chan string) taskquit := make(chan bool) workerquit := make(chan bool) go func() { loop: for { select { case <-taskquit: workerquit <- true break loop case job := <-task: fmt.Println(job) } } }() go func() {
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、並列と並行の違い - 本当は怖い情報科学 parallel と concurrent 、並列と並行の覚え方 - まめめも (追記) 孫引きなんだけど「コーディングを支える技術 171P」に「プログラミング言語の概念と構造」から引用した記述があった ここでは並行→プログラミング上の概念、並列→ハードウェアレイヤーの話となっていますね。 並列処理・並行処理がプログラミングに必要な理由 マルチコアを生かしたパフォーマンスの向上 大規模なデータの処理 GUIアプリケーションのユーザビリティ
2013/Oct/14に開催された"Parallel and Concurrent Programming in Haskell" (by Simon Marlow) の読書会第5回についての呟きをまとめました。今回は、並行プログラミングにおける非同期・同期例外の取り扱いと、STMモナドの話。STM超便利。さくっと把握したい向きは最後の井上さんによるまとめを読みましょう。
[Video] http://www.youtube.com/watch?v=99RABfKNfcY [Slide] http://goo.gl/9VY2b TwitterのJames Waldropが、オープンソースのロードジェネレータライブラリlagoと、スケールが可能な負荷テストの仕組みについてGTAC (Google Test Automation Conference) 2013で語ってます。Twitterには本番トラフィックの一部を利用したテストもありますが、本講演ではテスト環境でのロードジェネレータを話題にしてます。 FacebookからTwitterに転職し、lagoをつくった理由は、 ありあわせのツールをもってきて使ってもだめで、エンジニアであれば何か開発しないと他のエンジニアから尊敬されない。 Scalaで書いてみたかった。 既存のロードジェネレータはどれも役に立たない
本日社内向けのTechTalkにて、並列・並行プログラミングに関する話を行いました。 昨今、プログラムの並列化はなくてはならないものとなっています。しかし、そのプログラミング環境は依然としてロックを用いたものが主流です。今回の発表の主張を端的に申し上げますと、 “Locks must go!” ということになります。並列プログラミングに銀の弾丸はありません。しかし、ロックは別の何らかの安全性を確保したプログラミングモデルで置き換えられなければいけません。そうでなければ、再現しにくいバグに苦しめられ、終電を逃す日々と決別することはできないでしょう。また、ロックによるプログラミングの抱える本質的問題にも言及しています。 この界隈の最新の動向として、去年OOPSLA’10にて発表されたConcurrent Revisionsについての解説も行なっております。また、弊社研究開発において、先日Con
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く