タグ

Linuxとスレッドに関するiwwのブックマーク (42)

  • psコマンドでスレッドを表示させたり、スレッドごとのCPU使用率を確認する - 元RX-7乗りの適当な日々

    今更なネタかもしれませんが、psコマンドでは通常プロセス単位での表示となりますが、"man ps"を読んでみたところ、"-L"等のオプションをつけることで、スレッドを表示することもできるようです。 スレッド表示 H   スレッドをプロセスのように表示する。 -L   可能ならば LWP と NLWP カラムをつけてスレッドを表示する。 -T   可能ならば SPID カラムをつけてスレッドを表示する。 m   プロセスの後にスレッドを表示する。 -m   プロセスの後にスレッドを表示する。 Man page of PS では、早速試してみましょうか。 普通に"ps -ef"を実行 $ ps -ef | grep -e mysqld -e PID | grep -v grep UID PID PPID C STIME TTY TIME CMD root 4570 1 0 Dec09 ? 00

    psコマンドでスレッドを表示させたり、スレッドごとのCPU使用率を確認する - 元RX-7乗りの適当な日々
  • リード・コピー・アップデート - Wikipedia

    リード・コピー・アップデート(read-copy-update、RCUと略記)とは、オペレーティングシステムにおいて一種の排他制御[note 1]を実装する同期機構であり、リーダー・ライターロック(英語版)の代替手段として使われることがある。参照において待ち状態が生じず、極めてオーバーヘッドが低い。しかしRCUにおけるデータ更新は、既存の参照者のために古い版のデータ構造を保持しつつ行うため、時間と空間(メモリ)をより多く必要とする。古い版のデータ構造は、既存の参照者が全てアクセスを完了した後で回収される。 RCUでは「参照側クリティカルセクション」という概念があり、通常 rcu_read_lock() と rcu_read_unlock() で挟まれた部分がそれにあたる。参照側クリティカルセクション内にない文は「不活性状態」と呼ばれ、RCUで保護されたデータ構造への参照を保持することは許さ

  • Man page of PTHREAD_MUTEXATTR

    iww
    iww 2018/08/21
    『pthread_mutexattr_destroy は LinuxThreads の実装では何もしない。』 Linux以外だと、_init呼んだときに裏でメモリ確保とかしてることがあるので、_destroyで開放しないとメモリリークになることがあるから。
  • Man page of SEM_OVERVIEW

    Section: Linux Programmer's Manual (7) Updated: 2020-06-09 Index JM Home Page roff page 名前 sem_overview - POSIX セマフォの概要 説明 POSIX セマフォを使用すると、プロセスやスレッド間でその動作を 同期させることができる。 セマフォは整数であり、その値は決して 0 未満になることは許されない。 セマフォに対してできる操作は 2 つである: セマフォ値を 1 増やす (sem_post(3)); セマフォ値を 1 減らす (sem_wait(3))。 セマフォの値がすでに 0 の場合、セマフォ値が 0 より大きくなるまで sem_wait(3) 操作は停止 (block) する。 POSIX セマフォには、名前付きセマフォ (named semaphore) と 名前なしセマフ

    iww
    iww 2018/08/21
    プロセス間でのセマフォ
  • Man page of PTHREADS

    Section: Linux Programmer's Manual (7) Updated: 2020-12-21 Index JM Home Page roff page 名前 pthreads - POSIX スレッド 説明 POSIX.1 は、一般に POSIX スレッドや Pthreads として知られる スレッドプログラミングのインターフェース群 (関数、ヘッダーファイル) を規定している。一つのプロセスは複数のスレッドを持つことができ、 全てのスレッドは同じプログラムを実行する。 これらのスレッドは同じ大域メモリー (データとヒープ領域) を共有するが、 各スレッドは自分専用のスタック (自動変数) を持つ。 POSIX.1 はスレッド間でどのような属性を共有するかについても定めている (つまり、これらの属性はスレッド単位ではなくプロセス全体で共通である): - プロセス I

    iww
    iww 2017/07/11
    『Linux では、Pthreads API を用いたプログラムは cc -pthread でコンパイルすべきである。』 そうなのか! ナンデ!?
  • Glibc malloc internal

    2. 今日は何の話? libc でもっとも良く使われる関数、 malloc と free の実装の解説 もっと一般的に言うと、プロセスのアドレス空間のうち、 heap 領域とよばれる、場所を操作する関数の説明 解説というと聞こえはいいが、そんな大層なものじゃない 3. Linux での process address space model kernel stack text mmap data bss heap 矢印はデータ量の増加と ともに、伸びる方向 使用中 使用中 使用中 今日は、ここ、 heap と呼ばれる領域のお話 low high free free free 4. 古典的 malloc プログラミング言語 C (いわゆる K&R) で紹介された初期の Unix の malloc 実装 使用中 使用中 使用中 free listの head 使用中 ・ free list を

    Glibc malloc internal
  • [Linux][C/C++] tid (thread id) を取得する / pthread_createをラップして子スレッドのtidの取得 - Qiita

    [Linux][C/C++] tid (thread id) を取得する / pthread_createをラップして子スレッドのtidの取得CC++Linuxpthreadtid デバッグ用途にて、pthread がどこのスレッドから作成されたかを調べたいケースがあったので、 tidの取得方法と、pthread_create にて作成された子スレッドのtidを取得する方法を調査した。 基的に以下の方法にて LD_PRELOAD を利用することを前提にしている。 LD_PRELOADでprintfを後から差し替える - Qiita gettidを使用する gettid は Linux では syscall 経由でしか使用できない様子。以下のようにする。 #include <unistd.h> #include <sys/types.h> #include <sys/syscall.h>

    [Linux][C/C++] tid (thread id) を取得する / pthread_createをラップして子スレッドのtidの取得 - Qiita
  • 革命の日々! マルチスレッドでpipeをselectで中にcloseした場合について

    http://www.a-k-r.org/d/2007-12.html#a2007_12_31_1 たしか、この話は議論をしてLinusが仕様だと言い張って終わった気がする。 マルチスレッドなのに排他を忘れるアプリが悪いとかいって まあ、例によってちゃんとしたユースケースがあればひっくり返せると思う。 追記:なんか理由を思い出した気がする。close()するときにスレッド間の排他がされてないってことは select()するスレッドの知らないところでcloseされて、さらにopenされてfdが再利用されてしまい、 全然違うソケットを監視してしまう可能性があるってことだろ。 そんなナンセンスなアプリあるわけないし、あったっとしてもアプリを直すべきだ。 とにかく(すーはー)、マルチスレッドが排他の考慮を忘れたおばかさんのケアをするのは カーネルの仕事じゃねーぜ とかそんな論旨だったと思う

    iww
    iww 2015/08/25
    そもそもselect中にcloseするようなコードを書くやつが悪い、という結論なのか
  • システムコールを経由する生のLinuxスレッド | POSTD

    Linuxのスレッドは、洗練された美しい設計です。スレッドは仮想アドレス空間とファイルディスクリプタテーブルを共有するプロセスに過ぎません。プロセスによって生成されたスレッドは、メイン”スレッドの”親プロセスに追加された子プロセスです。これらは同じプロセス管理のシステムコールを通して処理されるので、スレッドに関するシステムコールのセットを分ける必要性を取り除きます。これはファイルディスクリプタと同様に洗練された方法です。 一般的に、UNIX系のシステムではfork()を使ってプロセスを生成します。新しいプロセスは、オリジナルのコピーとして独自のアドレス空間とファイルディスクリプタテーブルを取得します。(Linuxではコピーオンライトを使用して、この部分を効率的に処理します。)しかし、これは非常に高度なスレッドの生成方法なので、Linuxでは別の clone() システムコールを使用します。

    システムコールを経由する生のLinuxスレッド | POSTD
  • POSIX Threads Programming

    Author: Blaise Barney, Lawrence Livermore National Laboratory, UCRL-MI-133316 Note: This tutorial is no longer supported. It remains for archival purposes. Table of Contents Abstract Pthreads Overview What is a Thread? What are Pthreads? Why Pthreads? Designing Threaded Programs The Pthreads API Compiling Threaded Programs Thread Management Creating and Terminating Threads Passing Arguments to Thr

  • Man page of NANOSLEEP

    Section: Linux Programmer's Manual (2) Updated: 2017-09-15 Index JM Home Page roff page 名前 nanosleep - 高精度なスリープ 書式 #include <time.h> int nanosleep(const struct timespec *req, struct timespec *rem); glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照): nanosleep(): _POSIX_C_SOURCE >= 199309L 説明 nanosleep() は、少なくとも *req で指定された時間の間、プログラムの実行を遅延させる。 nanosleep() は、呼び出したスレッドの実行を、 少なくとも *req で指定された時間の間、もしくは呼び出

    iww
    iww 2015/02/13
    『*rem の値を使うと、 nanosleep() をもう一度呼び出して、指定した時間の停止を 完了させることができる』 『割り込み後に繰り返し再開された場合、 nanosleep() の停止が相対的な期間であることは問題となることがある。』
  • Man page of PTHREAD_SELF

    iww
    iww 2012/11/20
    なんだこのふわっふわした関数。 使うなって言ってるようなもんじゃないか
  • IBM Developer

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    IBM Developer
  • システム全体で使えるスレッド数の最大値を上げる - そ、そんなことないんだから!

    システム全体での最大プロセス数(プロセス数+スレッド数)は、threads-max の値で決まる。(Linuxカーネルからは、スレッドもプロセスのように見える) この値を超えるプロセスは生成できないので必要に応じて十分な値を取る必要があるかもしれない。ただし、threads-maxのデフォルトの数値はメモリ量に合わせて起動時に計算された値となっている。ちなみにうちの環境では以下の値だった。 $ cat /proc/sys/kernel/threads-max 15871とりあえず、テストとして値を3倍にしてみる。変更方法は、/etc/sysctl.conf に以下のように追記する。 $ sudo vi /etc/sysctl.conf ... # システム全体での最大プロセス数 kernel.threads-max = 47613 ← 追記 編集後は以下のコマンドで設定を反映させる。 $

    システム全体で使えるスレッド数の最大値を上げる - そ、そんなことないんだから!
    iww
    iww 2012/06/13
    『threads-maxのデフォルトの数値はメモリ量に合わせて起動時に計算された値となっている。』
  • Linuxでの最大スレッド数:プログラマー社長のブログ:オルタナティブ・ブログ

    今日も昨日に続き、高性能ハード・ネットワーク環境で試行錯誤していました。今日、まずクリアーしたかったのが、スレッド数の壁です。多数のTCP/IPコネクションを扱うプログラムの場合、作りやすさから、スレッドを多用することがほとんどなのですが、昨日やってみた感じだと、OS全体で32767個くらいで、「Cannot allocate memory」エラーが発生していました。 Linuxの場合、カーネルのパラメーターを調整することで、様々な上限値を変えることができるのですが、パラメーターの数が多く、どれがどの場合に有効かがわかりにくいのです。 結局は、kernel.threads-maxと、kernel.pid_max、vm.max_map_countを増やせば、スレッド数が増やせた、という感じでした。 「 sysctl -w kernel.threads-max=600000 sysctl -w

    Linuxでの最大スレッド数:プログラマー社長のブログ:オルタナティブ・ブログ
  • ファイルディスクリプタについて(3) ~タイマー用ディスクリプタ「timerfd」の特徴

    ファイルディスクリプタは、プログラムの外部との入出力を行う抽象的なインタフェースです。Unix/Linuxのファイルディスクリプタは、一般的なファイルだけでなくデバイスやソケットやパイプも対象としています。当連載は、ファイルディスクリプタの機能や管理方法などを提示します。第3回は、設定時間をファイルディスクリプタ経由で通知する「timerfd」を紹介します。 はじめに 前回は、イベント用ファイルディスクリプタ「eventfd」の使用法や特徴を説明しました。今回は、時間を通知するファイルディスクリプタ「timefd」について解説していきたいと思います。 連載概要 この連載は、次のような内容について述べていく予定です。 連載目次 第1回:ディスクリプタの概要 第2回:イベント用ディスクリプタ「eventfd」の特徴 第3回:タイマー用ディスクリプタ「timerfd」の特徴 第4回:シグナル用デ

    ファイルディスクリプタについて(3) ~タイマー用ディスクリプタ「timerfd」の特徴
  • 革命の日々! マルチスレッドプログラムはforkしたらexecするまでの間はasync-signal-safe な関数しか呼んではいけない

    http://cvs.m17n.org/~akr/diary/2009-04.html#a2009_04_15 このへんの資料みながら。 SUSによると、マルチスレッドプログラムはforkしたあと、async-signal-safeオペレーションしか、しちゃダメということになっている。 特に glibc とかだと、規格を守らない奴がバカ。ってスタンスなので、libc 呼び出し中にforkしたらハングしても文句はいえない。 libc の中でmutex使っていけないというルールはないから。 http://www.opengroup.org/onlinepubs/009695399/functions/fork.html A process shall be created with a single thread. If a multi-threaded process calls fork(

  • gccにおけるatomic操作命令の個別関数

     gccとVC x86/x64環境で開発する上で, gccとVCはどちらも非常に優れたC/C++コンパイラです. ただLinuxWindowsのどちらの環境でも動作するようなC/C++コードを書くためには, gccとVC, およびそれらが動作するOSの違いが問題になることがあります. ここではそれらの違いについてまとめていきたいと思います. なお説明を簡単にするためにマクロを多用していますが実際には可能なら別の手段をとるか, 名前がぶつからないような命名規則に則ったマクロ名をつけることをお薦めします. 対象 定義済みマクロ 有用なマクロ コンパイルオプション 演算子の代替表現の抑制 日語のコメント 型 pragma attributeとdeclspec ファイル入出力 テキストとバイナリ 巨大なファイル static変数の初期化 snprintf 例外ハンドラ intrinsic関数

    iww
    iww 2012/01/19
    関数内のstatic変数の初期化はデフォルトでスレッドセーフ
  • Threadのpidを表示する方法

  • 革命の日々! Linuxでメインスレッド以外がexec(2)を呼ぶと

    プロセスIDが変わっちゃうのね(^-^;; これってPOSIX違反じゃねーの? とかオモタ 何でかって言うと、 1.POSIX的にexecすると、exec呼び出しスレッド以外のスレッドは すべて死ぬ 2.LinuxにおいてプロセスID=メインスレッドのスレッドIDである 3.1,2とつじつまを合わせるため、exec時に自分がメインスレッド でなかったらプロセスIDを自分のスレッドIDに設定しなおす という動作をしているため。 (´_ゝ`)フーン ...