ゆるふわまなび日記

情弱がゆるふわな感じに勉強をしていくブログです。

プロセスとスレッド Linux&Ruby

linuxのはなし

プロセスとスレッド - プロセスはプログラムのインスタンス - 1プロセスで同時に動くのは1プロセス - スレッドはプロセスを細かくした実行単位 - プロセスの中で平行に動かしたいものをスレッドという単位で分ける

それだと効率が悪いので Kernelから見たら、 - 1プログラムは、1プロセスとして扱う - 1プロセスの中でスレッドが複数あったら、それらをライトウェイトプロセスとして扱い、プロセス同様に処理する。

Rubyのはなし

Thread.new // スレッド -> Rubyのprocessは1# Ruby のスレッドスケジューリングはネイティブスレッドのそれを利用  (ruby-2.1.0)
Process.fork // プロセス -> Rubyのprocessは3

さらにRubyだと、ノンプリエンプティブな軽量スレッド(以下ファイバーと呼ぶ)を提供している。

参考

Head First C (2) ポインタ

ポインタ

ポインタに対する理解はメモリに対する参照でしょー?程度。笑笑笑

ポインタは コピーの回避データ共有 の両方に役立つ。

関数内で変数を宣言すると、 スタック と呼ばれるメモリ部分に変数を格納。 関数の外側で宣言すると、 グローバル セクションに格納される。 ヒープ???

Cは引数を値として渡す。 ポインタを使うことによって、メモリ共有が簡単になる。

int x = 4;
printf("xの格納位置は%p\n", &x);
// %pフォーマットは、16進数形式で位置を出力する

// intを格納するためのポインタ変数
int *address_of_x = &n;
  • 変数はメモリに格納場所を割り当てる
  • ローカル変数はスタックに格納される
  • グローバル変数はグローバルセクションに格納される
  • ポインタはメモリアドレスを格納する変数に過ぎない
  • &演算子は変数のメモリアドレスを見つける
  • *演算子はメモリアドレスの内容を読み取れる
  • *演算子はメモリアドレスの内容を設定することもできる

Head First C (1)

バニラの状態では文字列をサポートしてない => 文字の配列を使う 文字列の最後に番兵文字を追加して実現する。\0 => ヌル文字 シングルクォートは個々の文字に使う。ダブルクオートは必ず文字列に使う。

“ほげほげ” => 文字列リテラル : 定数なので変更できない 文字配列 : 変更できる

Cのブール値は数値 : 偽 = 0, 真 = それ以外の値 & operator, | operator は必ず両方の条件をチェックする => 主にビット演算に使われる

case ‘K’:
case ‘B’:
  puts(“hoge”)

‘K’ or ’B’のときに当てはまるように書ける => rubyのでもいけるのかな? ただし、switchで文字列や配列を調べることはできない

while () {} => 0回以上のルーブ実行 do { } while () => 1回以上のループ実行

breakはループからすぐ抜けられる if からは抜け出せない

mainのreturn文を忘れたら、C99企画の場合は入れてくれる。 -std=c99でcompileすると可能

GCC = GNU Compiler Collection Collectionなのはいろいろな言語のコンパイルができるから。